最近在搞VBA,在感嘆Excel功能強大的同時,對於新接觸的一門編程語言也很煩惱。很多基礎的語法都要靠網上搜索。現總結一些學習到的心得。
VBA高效刪除不連續多行
在一個擁有幾萬條數據的Excel中,若要刪除其中其些行數據,並且這些行是不連續的。那么用for循環遍歷、判斷后一條一條的刪除的效率是很低的。那么有什么方法可以在1秒級別的時間里刪除這些行呢?
大致思路是先將這些行連續起來,再批量刪除。
可以借用一列數據進行輔助。for循環判斷出將要刪除的行,在輔助列的位置設置一個標志位,如“1”。再將這列排序,最后刪除。代碼如下:
Dim rowBegin As Integer Dim rowMax As Integer rowBegin = 2 rowMax = ActiveSheet.UsedRange.Rows.count '省略設置標志位的代碼 '借用Z列輔助 '排序 Range("A" & rowBegin & ":Z" & rowMax).Sort key1:=Range("Z" & rowBegin), order1:=xlAscending, header:=xlNo '刪除 If [Z65536].End(xlUp).row >= rowBegin Then Rows(rowBegin & ":" & [Z65536].End(xlUp).row).Delete End If
4萬條數據中刪除2萬條數據大概用時1秒。
另,總結一些遇到過的問題。
給單元格加鎖時,提示“不能設置類Range的Locked屬性”
ActiveSheet.Range("B:B").Locked = True '給第二列加鎖
可能由兩個原因造成:
1.加鎖范圍中的某部分已經有鎖(如已經將第一行加鎖),這樣在加鎖前要先解除鎖定。
ActiveSheet.Unprotect ("password")
2.加鎖的部分與未加鎖的部分有合並單元格(如A1與B1是合並單元格)。
