2016-07-15 218 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將字符串視爲數組中的值。