我正在尝试在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