带数组的自动过滤器仅返回一个值

时间:2018-07-19 10:50:20

标签: excel-vba

所以我得到的这段代码基本上是弗兰肯斯坦(Frankenstein)编写的具有不同代码段的怪兽,因为我对自己的编码不是很高。这是一个excel表格,可导入类似xml的代码的文本文件,我希望它向我展示重要的内容。在这种情况下,我基本上希望自动过滤器删除不包含PA1 *,PA2 *和PA4 *的所有行。

之前,我只想保留PA2 *和PA4 *,并将它们作为两个不同的条件,但是据我的理解和经验,当您需要两个以上的条件时,并不是那么容易。

运行此代码将删除所有行,除了具有最后三个条件的行(在本例中为PA1 *)。我已经尝试过解决这个问题,但是今年夏天的高温使大脑缓慢的工作变得更加缓慢,赞赏我能得到的所有帮助!

我现在正在使用的代码段:

Dim rng As Range
Dim lastRow As Long

Set ws = ActiveWorkbook.ActiveSheet
lastRow = ws.Range("A" & ws.rows.Count).End(xlUp).Row
Set rng = ws.Range("A1:A200" & lastRow)


With rng
    .AutoFilter Field:=1, Criteria1:=Array("<>PA4*", "<>PA2*", "<>PA1*")
    .Offset(0, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
 End With

谢谢!

1 个答案:

答案 0 :(得分:1)

Set rng = ws.Range("A1:A200" & lastRow)不会返回您期望的结果。在后面的行上写MsgBox(rng.Address),以查看引用的地址。

然后将其更改为此:

Set rng = ws.Range("A1:A" & lastRow)