VBA高效刪除不連續多行


  最近在搞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是合並單元格)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM