使用excel vba筛选出多个条件

您所在的位置:网站首页 vba模糊筛选多列 使用excel vba筛选出多个条件

使用excel vba筛选出多个条件

2023-09-23 05:57| 来源: 网络整理| 查看: 265

我认为(通过试验-MSDN在这里无济于事)没有直接的方法可以做到这一点。设置Criteria1为an Array等效于使用下拉菜单中的复选框-就像您说的那样,它只会根据与数组中的一项相匹配的项目来过滤列表。

有趣的是,如果您具有文字值,"A"并且"B"在这些列表和过滤器上,宏记录器将提供

Range.AutoFilter Field:=1, Criteria1:="=A", Operator:=xlOr, Criteria2:="=B"

哪个有效。但是,如果您同时也具有文字值"C",并且在记录宏时对所有三个值进行了过滤(使用复选框),则宏记录器会精确地复制您的代码,然后该代码将失败并显示错误。我想我会把它称为一个错误-使用UI可以执行某些过滤器,而使用VBA则不能。

无论如何,回到您的问题。可以过滤不等于某些条件的值,但最多可以过滤两个不适合您的值:

Range("$A$1:$A$9").AutoFilter Field:=1, Criteria1:="A", Criteria2:="B", Operator:=xlAnd

根据确切的问题,有几种解决方法:

将“帮助列”与B列中的公式一起使用,然后对其进行过滤-例如,=ISNUMBER(A2)或=NOT(A2="A", A2="B", A2="C")随后对TRUE

如果您无法添加列,请使用具有Criteria1:=">-65535"(或比您期望的数字低的合适数字)的自动过滤器,该过滤器会过滤掉非数字值-假设这是您想要的

编写一个VBA子来隐藏行(与自动过滤器不完全相同,但根据您的需要可能就足够了)。

例如:

Public Sub hideABCRows(rangeToFilter As Range)

  Dim oCurrentCell As Range

  On Error GoTo errHandler

  Application.ScreenUpdating = False

  For Each oCurrentCell In rangeToFilter.Cells

    If oCurrentCell.Value = "A" Or oCurrentCell.Value = "B" Or oCurrentCell.Value = "C" Then

      oCurrentCell.EntireRow.Hidden = True

    End If

  Next oCurrentCell

  Application.ScreenUpdating = True

  Exit Sub

errHandler:

    Application.ScreenUpdating = True

End Sub



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3