9

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

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 を実行し、バリアントを文字列配列に変換することで、範囲値を配列に取得できました。Filter を配列の最後の値に設定するだけなので、これは私が望んでいたようには機能しませんでした。たとえば、配列に ID ("12"、"44"、"13"、"22") が含まれていて、その配列に Criteria1 を設定して実行すると、フィルターでは 22 のみが選択され、他のすべての数値が選択解除されます。 12、44、および 13。

4

1 に答える 1

17

私はそれを考え出した!再コーディングを試みましたが、最初に試みたとき、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」は、記録が途中で停止したため、初めてマクロを記録するときに見逃した重要な部分でした

于 2013-04-12T20:12:31.770 に答える