私は他の投稿を検索しましたが、同様の問題を見つけましたが、特に私を助けることはできませんでした。文字列の配列を取得し、フィルター条件として使用しようとしています。配列は関数によって作成され、要素と内容の数が可変であるため、注意が必要です。オートフィルターを使用して、各要素のcolumn Eをチェックする必要があります。
私は2つの方法を試しました
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に基準を置くことはできません番目 列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 が配列内の値として文字列を好みます。
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