Excel 通过取消选择多个值,在单个列中过滤整个数据

Excel 通过取消选择多个值,在单个列中过滤整个数据,excel,vba,filtering,Excel,Vba,Filtering,我是excel VBA编码新手。尝试通过在SR变量中选择范围来过滤整个数据,但在SR变量处出现错误(运行时错误424) 也可以有人提供进一步的编码。我需要过滤掉SR变量的整个数据,方法是在D列中保留值(“ABC”、“DEF”),并删除(CTRL减号)具有多个值的其余行,而不是我提到的 以下是起始代码: With ActiveSheet Dim SR As Range LR = Range("A" & Rows.Count).End(xlUp

我是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

为了使代码可行,必须使用以下代码:

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
将出现一条询问所有行删除的消息

编辑: 下一个代码将删除与筛选条件不匹配的行,以满足两个以上的条件。 只有当过滤区域从第一行开始时,它才能正常工作。如果不是,则必须进行校正,将第一排图纸和第一排过滤区域的差值相加:

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:…),但它可以是工作表中的任意范围…

嗨,欢迎使用SO。我们不是代码编写服务。您必须尝试并向我们提供您的代码。然后我们可以帮助您解决代码中的任何问题。此外,哪一行会引发错误?您设置SR的位置还是设置过滤器的位置。我怀疑是晚一行
SR.Select.AutoFilter
在语法上看起来是错误的。如果您指定了范围(
SR
),也就是说,
SR.AutoFilter
@Cyril。,是否需要
Select
:)。尽管前几天我遇到过一个场景(这里有一个问题)我知道的很少!我想你的解释基本上是正确的。我要补充的唯一一点是:使用
ActiveSheet
充满危险。我建议对工作表使用早期或晚期绑定,并参考你想要工作的特定工作表with@Zac当前位置我同意。我也不会使用这种方法。我只是试着用一些可行的方法来转换他的代码。事实上,根据我对他的需求的理解,我会用另一种方式来做…过滤代码是,让我们说,一种只适合他学习的说教方法。找到一个不了解它是如何工作的,它是什么的代码不是最合适的方法学习的方式,我想…谢谢各位。是的,我明白要求完整的代码不是合适的方式。接下来,我会记下这个反馈。@SRKAN:我编辑了我的答案,发布了一个解决方案。没有优化工作表对象绑定,这仍然是你们的任务…:-)@FaneDuru当我添加Criteria3,Criteria4,a时它向我抛出了一个错误“未找到名为argument的编译错误”。我不能添加多个值以过滤掉吗?
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