2016-07-15 6 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 

注:カウンタは、配列内の要素の数を表す整数です 結果:これはアレイを正しくループしますが、フィルタの最後のオプションのみが選択されます。ループバックするたびに開始され、他のすべてのオプションがチェックされなくなります。

答えて

5

AutoFilterのExcelのマニュアルにはいくつかのガイダンスがあります。 Operatorパラメータは、Criteria1がどのように解釈されるかを指定するXlAutoFilterOperatorをとります。あなたの場合、xlFilterValuesの値を指定すると、Criteria1はフィルタ値の配列として正しく解釈されます。

次の例では、このことを示しています。

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

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

あなたは配列から単一の要素を転置する必要はありませんし、あなただけの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 Methodが配列内の値として文字列を好きなときに指定します。

関連する問題