在VBA自动筛选器中使用string数组作为条件

我搜查了其他post,发现类似的问题,但没有什么可以帮助我具体。 我试图采取一个string数组,并将其用作过滤条件。 这很棘手,因为数组是由一个函数创build的,并且具有可变数量的元素和内容。 我需要自动filter,并检查列E的每一个元素。

我试过两种方法

1)

With Sheet17 .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr) End With 

结果:将筛选器应用于列E,但未能select任何选项

2)

 For i = 0 To counter - 1 With Sheet17 .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr(i)) End With Next 

计数器是一个整数,表示数组中元素的数量结果:这个数组正确地循环遍历数组,但是只select了filter的最后一个选项 – 大概是因为每次循环它都会重新开始并取消选中所有其他选项最后只有最近的选项保持被选中。

如果仅引用列E,则不需要将数组中的单个元素转置,并且不能将条件放入第5 字段中。

 Dim i As Long, arr As Variant arr = Array(1, 3) With Sheet17 'to filter each value in the array one at a time For i = 0 To UBound(arr) .Columns("E").AutoFilter Field:=1, Criteria1:=arr(i) Next i 'my values were numbers - AutoFilter likes strings in its array For i = LBound(arr) To UBound(arr) arr(i) = CStr(arr(i)) Next i 'to filter all values in the array at once specify xlFilterValues .Columns("E").AutoFilter Field:=1, Criteria1:=arr, _ Operator:=xlFilterValues End With 

指定Operator:=xlFilterValues传递数组时, Range.AutoFilter方法喜欢string作为数组中的值。

AutoFilter的Excel文档提供了一些指导。 Operator参数使用XlAutoFilterOperator来指定如何解释Criteria1 。 在你的情况下,指定xlFilterValues的值将导致Criteria1正确解释为filter值的数组。

以下示例演示了这一点:

 Dim arr As Variant arr = Array("Alpha", "Bravo", "Charlie") Sheet17.Range("E1").AutoFilter _ Field:=5, _ Criteria1:=arr, _ Operator:=xlFilterValues