VBA程式設計刪除Excel中符合多重條件的行?

Excel中按給定條件批量刪除行,一般採用按條件排序然後手工刪除的方法,但如果是多重條件,同時行數比較多得情況下,用這種方法效率太低了,累得疲憊不堪,還容易出錯。而用VBA編一個簡單的程式,只需一瞬間即可完成。請跟我來,憑您的聰明智慧一看便會!

VBA程式設計刪除Excel中符合多重條件的行

工具/原料

Excel/VBA

方法/步驟

這裡有個人事資訊表(裡面的資訊純屬虛構如有巧合敬請見諒)。我們把每一行人員的資訊稱作一條記錄。要把年齡小於18歲的、或年齡大於60歲的、或學歷是高中以下的記錄刪除。我們先來做一件事:編個程式把符合條件的記錄標上顏色,就像表中的那樣,通過這個程式理一下思路,也為下一步做個準備。

VBA程式設計刪除Excel中符合多重條件的行

給符合條件的記錄標色

右擊工作表標籤-->檢視程式碼-->在彈出的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執行。

VBA程式設計刪除Excel中符合多重條件的行

這段程式是通過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

試試看!

結果是沒有刪除乾淨!刪除了一部分,這是怎麼回事呢?

VBA程式設計刪除Excel中符合多重條件的行

來分析一下刪除的過程:比如刪除了第5行,後面的內容上移,第6行上移變成第5行,而此時迴圈變數i增1下移一條記錄移至第6行,第5行被跳過沒有處理。原來是迴圈變數在作怪,找到原因就好辦了。

我們在執行語句 rows(i).delete 後面加一條:i=i-1 。這樣,當刪除一條記錄後讓i退回原來的值,也就是停留在上移補位的那條記錄上。問題解決了!看一下這次的執行結果!

VBA程式設計刪除Excel中符合多重條件的行

下面是最終的程式:

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

VBA程式設計刪除Excel中符合多重條件的行

也可以用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

祝您愉快!

VBA程式設計刪除Excel中符合多重條件的行

條件, 程式, 太低, excel,
相關問題答案