我是第一次超越VBA编码。尝试通过选择SR变量中的范围来筛选整个数据,但在SR变量上获得错误(运行时误差424)。
也可以有人提供进一步的编码。我需要过滤掉SR变量的全部数据,方法是将值("ABC“、"DEF")保留在D列中,并删除(CTRL减去)除前面提到的多个值的其余行。
下面是开始代码:
With ActiveSheet
Dim SR As Range
LR = Range("A" & Rows.Count).End(xlUp).Row
Set SR = Range("A1:AP" & LR)
SR.Select.AutoFilter
End With
发布于 2019-11-21 05:56:05
为了使代码有效,您必须使用以下代码:
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
这一个将过滤你的范围的面积,根据您的上述标准。我认为学习这一点(对你来说)很好,并找到一种方法来删除不必要的行,查看互联网,并将不像预期的东西带到这里。就像前面提到的论坛同事一样,我们不是代码编写服务.为了完成您解释的需要,我将给您一些提示:如果您希望使用过滤器完成任务,好的。您必须创建另一个范围变量,以保留可见单元格,然后在初始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
在本例中,它显然是第一页(范围(“A1:.”),但它可以是工作表中的任意范围.
https://stackoverflow.com/questions/58975103
复制相似问题