为了使你的代码可以工作,你必须使用这个:
With ActiveSheet
Dim SR As Range, LR As Long ', visCells As Range, i As Long
LR = .Range("A" & Rows.Count).End(xlUp).Row
Set SR = .Range("A1:AP" & LR)
SR.AutoFilter field:=4, Criteria1:="ABC", Operator:=xlOr, Criteria2:="DEF", VisibleDropDown:=False
End With
这将根据您提到的标准过滤您的范围区域。
我认为了解这一点并找到一种方法来删除在互联网上查看的不必要的行并将不符合预期的内容带到这里是很好的(对你来说)。就像前面提到的一位论坛同事,我们不是代码编写服务...
为了做你解释的需要,我会给你一些提示:
如果您希望使用过滤器完成任务,请确定。您必须创建另一个 Range 变量来保留可见单元格,然后在初始 SR 行之间迭代并删除不在 visibleCells 范围内的那些。
我想提一下,不需要事先过滤范围即可进行此操作。在行之间迭代(从最后一行到第一行)并根据您的标准在 D:D 列中删除不匹配的行就足够了。
编辑:
我有些懊悔,我喜欢你的评论......
所以,请接收一段可行的代码,做你想做的事:
Dim SR As Range, LR As Long
With ActiveSheet
LR = .Range("A" & Rows.Count).End(xlUp).Row
Set SR = .Range("A1:AP" & LR)
SR.AutoFilter field:=4, Criteria1:="<>ABC", Operator:=xlAnd, Criteria2:="<>DEF", VisibleDropDown:=False
Application.DisplayAlerts = False
SR.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
End With
为了更好地使用 VisibleCells 方法,我在另一侧进行了过滤。让所有其他行可见。如果你不使用
Application.DisplayAlerts = False
'.........
Application.DisplayAlerts = True
会出现询问所有行删除的消息...
编辑:
下一个代码将删除与超过两个条件的过滤不匹配的行。
只有当您的过滤区域从第一行开始时,它才能正常工作。如果不是,则必须进行更正,添加第一行和过滤区域第一行的差异:
Dim SR As Range, LR As Long, R As Long
With ActiveSheet
LR = .Range("A" & Rows.Count).End(xlUp).Row
Set SR = .Range("A1:AP" & LR)
SR.AutoFilter field:=4, Criteria1:=Array("ABC", "DEF", "AAA"), Operator:=xlFilterValues
For R = SR.Rows.Count To 1 Step -1
If .Rows(R).Hidden Then .Rows(R).Delete
Next R
End With
在这个例子中,它显然是第一个 (range("A1:...),但它可以是工作表中的任何范围...