Excel中按給定條件批量刪除行,一般採用按條件排序然後手工刪除的方法,但如果是多重條件,同時行數比較多得情況下,用這種方法效率太低了,累得疲憊不堪,還容易出錯。而用VBA編一個簡單的程式,只需一瞬間即可完成。請跟我來,憑您的聰明智慧一看便會!
工具/原料
Excel/VBA
方法/步驟
這裡有個人事資訊表(裡面的資訊純屬虛構如有巧合敬請見諒)。我們把每一行人員的資訊稱作一條記錄。要把年齡小於18歲的、或年齡大於60歲的、或學歷是高中以下的記錄刪除。我們先來做一件事:編個程式把符合條件的記錄標上顏色,就像表中的那樣,通過這個程式理一下思路,也為下一步做個準備。
給符合條件的記錄標色
右擊工作表標籤-->檢視程式碼-->在彈出的VBA程式碼視窗中輸入下面的程式
Sub ColRec()
Dim EndRow As Single '定義變數,用於存放最後一行行號。
EndRow = Range("a65535").End(xlUp).Row
UsedRange.Interior.ColorIndex = 0 '初始化,表中底色恢復預設值。
For i = 2 To EndRow '遍歷工作表的每條記錄,i為記錄號的變數
If Cells(i, 2) > 60 Or Cells(i, 2) < 18 Or Cells(i, 3) = "高中以下" Then
Range("a" & i & ":c" & i).Interior.ColorIndex = 37
End If
Next i
End Sub
按下F5執行。
這段程式是通過For迴圈對每條記錄都過一遍,看是否滿足這個條件:
Cells(i, 2) > 60 Or Cells(i, 2) < 18 Or Cells(i, 3) = "高中以下"
其實是用“或”連線的三個條件,只要滿足其中一個就算滿足。如果條件滿足就執行這條語句:
Range("a" & i & ":c" & i).Interior.ColorIndex = 37
這條語句就是給滿足條件的記錄標底色的。
刪除符合條件的記錄
接下來要做的是把標了色的記錄刪掉。是不是把標色語句改成刪除語句就OK了呢?
Range("a" & i & ":c" & i).Interior.ColorIndex = 37
改成
rows(i).delete
試試看!
結果是沒有刪除乾淨!刪除了一部分,這是怎麼回事呢?
來分析一下刪除的過程:比如刪除了第5行,後面的內容上移,第6行上移變成第5行,而此時迴圈變數i增1下移一條記錄移至第6行,第5行被跳過沒有處理。原來是迴圈變數在作怪,找到原因就好辦了。
我們在執行語句 rows(i).delete 後面加一條:i=i-1 。這樣,當刪除一條記錄後讓i退回原來的值,也就是停留在上移補位的那條記錄上。問題解決了!看一下這次的執行結果!
下面是最終的程式:
Sub DelRow()
Application.ScreenUpdating = False '程式執行期間停止螢幕重新整理
Dim EndRow As Single '定義變數,用於存放最後一行行號。
EndRow = Range("a65535").End(xlUp).Row
For i = 2 To EndRow '遍歷工作表的每條記錄,i為記錄號的變數
If Cells(i, 2) > 60 Or Cells(i, 2) < 18 Or Cells(i, 3) = "高中以下" Then
Rows(i).delete
i = i - 1
End If
Next i
Application.ScreenUpdating = True
End Sub
也可以用While迴圈實現,作用一樣,只是程式讀起來容易理解一些。
Sub DelRow()
Application.ScreenUpdating = False
Dim EndRow As Single '定義變數,用於存放最後一行行號。
EndRow = Range("a65535").End(xlUp).Row
i = 2 '迴圈變數初始化
While i <= EndRow '遍歷工作表的每條記錄,i為記錄號的變數
If Cells(i, 2) > 60 Or Cells(i, 2) < 18 Or Cells(i, 3) = "高中以下" Then
Rows(i).delete
Else
i = i + 1
End If
Wend
Application.ScreenUpdating = True
End Sub
祝您愉快!