webdevqa.jp.net

値の列に基づいてExcel VBAのテーブルをフィルタリングする

テーブルがあり、そのいずれかの列の値で行をフィルター処理したいと思います。フィルタリングに使用される値は、テーブルではなく別の列に格納されます。これは私がこれまでに持っているものです:

Dim table1 As ListObject
Dim range1 As Range
Set range1 = ActiveSheet.range("AM23:AM184")
'get table object
table1.range.AutoFilter Field:=3, Criteria1:=???

基準1に何を置くべきか分かりません。私はそれが配列である必要があることを知っており、それをArray( "12"、 "2"、 "13")のようなものに設定できますが、等しくする必要があるのは、range1で指定された範囲で指定された値です。どんな助けでも大歓迎です。

編集:range1.Valueを実行し、バリアントを文字列配列に変換することで、範囲値を配列に取得できました。これは、フィルターを配列の最後の値に設定するだけなので、思い通りに機能しませんでした。たとえば、配列にID( "12"、 "44"、 "13"、 "22")が含まれていて、Criteria1をその配列に設定して実行すると、フィルターは22のみを選択し、他のすべての番号は選択解除されます。 12、44、13。

7
user972276

私はそれを考え出した!再コーディングを試みましたが、初めて試みたとき、1行のコードに関連付けられている行が多すぎるため、プログラムが不完全になりました。そのため、録音をやり直してコード全体を取得したところ、何かが足りなかったことがわかりました。コード全体は次のとおりです。

Dim range1 As range
Set range1 = ActiveSheet.range("AM23:AM184")
Dim var1 As Variant
Dim sArray() As String
Dim i As Long
var1 = range1.Value

ReDim sArray(1 To UBound(var1))

For i = 1 To (UBound(var1))
    sArray(i) = var1(i, 1)
Next

ActiveSheet.ListObjects("Table1").range.AutoFilter Field:=3, Criteria1:=sArray, Operator:=xlFilterValues

"Operator:= xlFilterValues"は、記録が時期尚早に停止したため、初めてマクロを記録できなかった重要な部分でした

16
user972276