Excel:使用多个条件筛选:AutoFilter或AdvancedFilter

时间:2017-03-15 07:31:50

标签: excel vba excel-vba autofilter advanced-filter

我正在尝试创建一个将执行以下操作的过滤器

以“4”或“开始”开头 包含“2TWH”或 包含“2TER”

我相信它会看起来像这样

ActiveSheet.Range("$A$5:$H$10").AutoFilter Field:=2, Criteria1:="=4*", _
    Operator:=xlOr, Criteria2:="=*2TWH*" 

但我还需要以某种方式对=“= 2TER ”进行标准3

我做了一些谷歌搜索,看到你可以将值存储到数组中,然后调用数组值,但我无法以可用的方式将它们放入数组中。

有人能为此提供一些帮助吗?

1 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

ActiveSheet.Range("$A$5:$H$10").AutoFilter Field:=2, Criteria1:="=4*", _
    Operator:=xlOr, Criteria2:=Array("*2TWH*","*2TER*")

这不会引发任何错误,但是......
由于存在通配符(*),因此仅采用2个条件。
这是数组中的最后一个条件(此处*2TER*

理想情况下,这会很好,因为它适用于常量
但是因为你使用WildCards(*),它只支持2个标准......:/

ActiveSheet.Range("$A$1:$H$10").AutoFilter Field:=2, Criteria1:=Array("*2TWH*", "*2TER*", "4*"), _
    Operator:=xlFilterValues

所以你必须选择AdvancedFilter

With ActiveSheet
    'Const xlFilterInPlace = 1
    .Range("$A$5:$H$10").AdvancedFilter _
                        Action:=xlFilterInPlace, _
                        CriteriaRange:=WsFilterSettings.Range("A1:A4")
End With 'ActiveSheet

AdvancedFilter范围作为条件输入CriteriaRange,因此您必须放一张表

  • 要应用于过滤器的标题标题
  • 您的条件位于相应标题下方(如果您有多个列)

该范围的每个 COLUMN 链接 AND
该范围的每个 ROW 通过 OR 链接 所以仔细建立你的桌子!

在上面的示例代码中,我使用了:
(让我们说列标题要过滤的列):

A1 | Column To Filter On
A2 | 4*
A3 | *2TWH*
A4 | *2TER*