Sortメソッドを使った場合、並び替え項目に項目名を直接入れて検索することができます。
Range(“A1″).Sort Key1:=”地区”, Key2:=”果物”, Header:=xlYes
しかし、抽出する場合のAutoFilterメソッドのField引数では、数値しか指定できません。
Sortメソッドと同じ感覚で、
Range(“A1″).AutoFilter field:=”地区”, Criteria1:=arr1, Operator:=xlFilterValues
を実行すると
実行時エラー’1004′:
Range クラスの AutoFilter メソッドが失敗しました。
と表示され、正常に動きません。
fieldの引数は数値しか指定できないので、field:=”地区”のように、文字列を指定できないのです。
私のようにvbaに詳しくない人は、他でできたことは別でもできるのではないかと勘違いしてしまうんです。
体系的にしっかり学んでいる人はこんな間違いはしないと思いますが、エラーの原因がわからない初心者さんに役に立ったらいいなと思い、この記事を執筆しました。
サンプルコードは、見出し項目を使って抽出するコードになります。
項目が増えたり、項目の場所を入れ替えても、使える汎用的なコードになってます。
fieldの引数が数値のみになるため、項目名の場所を検索して、その場所を変数が取得して動くコードになってます。
サンプルコード
Sub fndfilter()
Dim arr1() As Variant ‘1つ目の抽出項目の地区用の配列を宣言
Dim arr2() As Variant ‘2つ目の抽出項目の果物用の配列を宣言
Dim clmn As Long ‘抽出項目【地区】の列数の変数を宣言
Dim clmn2 As Long ‘抽出項目【果物】の列数の変数を宣言
arr1 = Array(“東京”, “大阪”, “福岡”) ‘地区用の絞込項目を設定
arr2 = Array(“りんご”, “みかん”, “ぶどう”) ‘果物用の絞込項目を設定
clmn = Range(“1:1”).Find(“地区”).Column ‘検索して地区の列を設定
clmn2 = Range(“1:1”).Find(“果物”).Column ‘検索して果物の列を設定
Range(“A1”).AutoFilter field:=clmn, Criteria1:=arr1, Operator:=xlFilterValues
‘地区を絞り込み
Range(“A1”).AutoFilter field:=clmn2, Criteria1:=arr2, Operator:=xlFilterValues
‘果物を絞り込み
End Sub
処理前データ
処理後データ
コメント