首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过取消选择多个值来过滤单个列中的全部数据

通过取消选择多个值来过滤单个列中的全部数据
EN

Stack Overflow用户
提问于 2019-11-21 04:29:26
回答 1查看 141关注 0票数 0

我是第一次超越VBA编码。尝试通过选择SR变量中的范围来筛选整个数据,但在SR变量上获得错误(运行时误差424)。

也可以有人提供进一步的编码。我需要过滤掉SR变量的全部数据,方法是将值("ABC“、"DEF")保留在D列中,并删除(CTRL减去)除前面提到的多个值的其余行。

下面是开始代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-11-21 05:56:05

为了使代码有效,您必须使用以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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列中删除不匹配的行就足够了。

编辑:我有点懊悔,我喜欢你的评论.因此,请接收一段可行的代码,做您想做的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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方法,我在另一边进行了过滤。让所有其他行可见。如果你不使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Application.DisplayAlerts = False
    '.........
Application.DisplayAlerts = True

会出现一条询问所有行删除的消息.

编辑:下一段代码将删除与筛选不匹配的行,超过两个条件。只有当过滤区域从第一行开始时,它才能正常工作。如果没有,则必须进行更正,以添加与第一行和筛选区域第一行的差异:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:.”),但它可以是工作表中的任意范围.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58975103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文