我正在嘗試在excel中爲vba編寫宏。我想刪除在D列(關鍵字爲「INVOICE」,「PAYMENT」或「P.O.」)中沒有至少三個關鍵字中的至少一個的每一行。我需要保持包含這些關鍵字的每一行。所有其他行都需要刪除,剩下的行需要推送到文檔的頂部。還有兩個標題行無法刪除。Excel VBA基於列中的多個條件刪除整個行
我發現了下面的代碼,但它刪除了不包含「INVOICE」的每一行。我無法操作代碼來執行我需要的操作。
Sub Test()
Dim ws As Worksheet
Dim rng1 As Range
Dim lastRow As Long
Set ws = ActiveWorkbook.Sheets("*Name of Worksheet")
lastRow = ws.Range("D" & ws.Rows.Count).End(xlUp).Row
Set rng = ws.Range("D1:D" & lastRow)
' filter and delete all but header row
With rng
.AutoFilter Field:=1, Criteria1:="<>*INVOICE*"
.Offset(2, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
' turn off the filters
ws.AutoFilterMode = False
End Sub
這是一個具有挑戰性的問題被發現的任何行。它看起來像'AutoFilter'只支持兩個最多兩個標準。你有沒有嘗試錄製一個宏的所有值取消選擇這三個? – 2015-01-09 20:49:45
這兩個'Criteria'限制有點令人失望,但你可以通過傳入'Array'來解決它。這似乎是一個類似的情況,可能會有所幫助:http://stackoverflow.com/questions/18868332/vba-autofilter-using-an-array-ignore-criteria-if-it-is-not-in-the-filtered -lis – 2015-01-09 20:54:46
@DanWagner啊,這就是我想知道的。如果我們對該字段有一組已知的可能值(因爲它是由規則執行的),那麼我們可以過濾要刪除的特定項目集。如果它是自由形式的,我們必須在裏面搜索,那麼迭代的方法可能是最好的。 – 2015-01-09 21:03:37