excel 通过取消选择多个值来过滤单列中的整个数据

yv5phkfx  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(116)

我是新的excel VBA编码。尝试通过选择SR变量中的范围过滤整个数据,但在SR变量时出错(运行时错误424)
也可以有人提供进一步的编码。我需要过滤掉SR变量的整个数据,方法是在D列中保留值(“ABC”,“DEF”),并删除(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
8i9zcol2

8i9zcol21#

为了使您的代码可工作,您必须使用以下代码:

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

这一个将根据您提到的标准过滤您的范围的区域。
为了做你解释的需要,我会给予你一些提示:
如果你想使用过滤器完成任务,OK。你必须创建另一个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

在本例中,它显然是第一个(范围(“A1:...),但它可以是工作表中的任何范围...

相关问题