2016-07-15 234 views
6

我已经搜索了其他帖子,发现类似的问题,但没有什么可以帮助我具体。我正在尝试使用一组字符串并将其用作过滤条件。这很棘手,因为该数组是由一个函数创建的,并且具有可变数量的元素和内容。我需要自动过滤器接收它并检查每个元素的列E在VBA自动筛选器中使用字符串数组作为条件

我已经尝试过两种方式

1)

With Sheet17 

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

End With 

结果:应用滤镜E列,但没有选择任何选项

2)

For i = 0 To counter - 1 

    With Sheet17 

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

Next 

注意:Counter是一个整数,表示数组中元素的个数 结果:它正确地遍历数组,但只选择过滤器上的最后一个选项 - 大概是因为每次循环时它都会重新开始并取消选中其他所有选项,因此最终只保留最近的选项。

回答

5

AutoFilter的Excel文档提供了一些指导。参数Operator需要XlAutoFilterOperator,它指定如何解释Criteria1。在你的情况下,指定一个值xlFilterValues将导致Criteria1正确解释为过滤器值的数组。

下面的例子说明了这一点:

Dim arr As Variant 
arr = Array("Alpha", "Bravo", "Charlie") 

Sheet17.Range("E1").AutoFilter _ 
    Field:=5, _ 
    Criteria1:=arr, _ 
    Operator:=xlFilterValues 
6

你不需要从阵列转一个元素,你不能把标准到5 场,如果你只引用列E.

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 Method将字符串视为数组中的值。