Excel: 多条件筛选:自动筛选或高级筛选

3

我正在尝试创建一个过滤器,其功能如下:

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

我认为它的表现将是这样的。

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

但我还需要一个以"=2TER"为标准的标准三。

我搜索了一些资料,发现可以将值存储到数组中,然后调用数组值,但是我无法以可用的方式将它们存入数组中。

请问有人能够提供帮助吗?

1个回答

2
这应该可以解决问题:
ActiveSheet.Range("$A$5:$H$10").AutoFilter Field:=2, Criteria1:="=4*", _
    Operator:=xlOr, Criteria2:=Array("*2TWH*","*2TER*")

这不会引发任何错误,但是它只会使用2个标准,因为有通配符(*)。这是来自数组的最后一个标准(在这里是*2TER*)。
理想情况下,这将是很好的,因为它适用于常量,但是因为你使用了通配符(*),它只支持两个标准... :/
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,因此您需要在工作表上放置以下内容

  • 要应用筛选器的列标题
  • 各自标题下方的条件(如果有多个列)

该范围的每个列都由AND连接
该范围的每一行都由OR连接
因此,请仔细构建您的表格!

在上面的示例代码中,我使用了:
(假设您的列标题Column To Filter On):

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

我喜欢这个想法,但我需要数组值为="=2TWH"而不仅仅是"2TWH"等。 - Mathew Hood
@MathewHood:看看修改!不需要,在数组中只使用2个参数测试第二段代码,你会发现你不需要“=”!;) 无论如何,享受高级过滤器吧!;) - R3uK
@模拟器:字母表中“N”的位置 ;) - R3uK
@R3uK 不好意思 :). 尽管出于某种原因,高级筛选器返回的是所有行而不是与通配符匹配的列。 - Simulator
@模拟器:读回自己的话,似乎应该是列标题而不是列号。您是在尝试根据列名过滤列吗? - R3uK
1
我实际上想尝试使用高级筛选而不使用列标题,但最终使用了它并且运行良好。 - Simulator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接