Excel。Excel VBAでオートフィルターを使いたい。文字列の抽出
<Excel VBA>
大量のデータから、決まっている条件で、必要なデータを抽出して、別のシートにコピーするなんてことを効率よく行うには、マクロを作っておくと便利です。そこで、Excel VBAで作成する方法を確認していきます。
【AutoFilterメソッドで簡単につくれる】
次のデータがあります。店舗名が新宿のデータを抽出する場合のコードを確認してみましょう。
Sub オートフィルターで新宿()
Range("a1").AutoFilter field:=2, Criteria1:="新宿"
End Sub
たった、1行のコードだけでOKです。
【説明】
Range("a1").AutoFilter field:=2, Criteria1:="新宿"今回のように、途中に空白行がない「ただしい表」になっている前提でのコードです。
オートフィルターを設定する場合、見出し行のセルをクリックして、フィルターボタンをクリックして、オートフィルターを表示します。
それと同じですから、Range(“A1”)としています。
AutoFilterメソッドでオートフィルターを設定することができます。
field:=2, Criteria1:="新宿"が、AutoFilterメソッドの引数です。
引数のfieldは、抽出したい左からの列番号を設定します。
今回は左から2列目にあるので、
field:=2
引数のCriteria1は、抽出条件の1。
仮に、複数条件ならば、Criteria12というように使用します。
Criteria1:="新宿" とすれば、新宿という条件で抽出することができます。
では、実行してみましょう。
このように、抽出することができました。
【複数条件での抽出】
抽出条件を変えてみましょう。今度は、新宿と池袋で抽出する場合のコードを確認してみましょう。
Sub オートフィルターで新宿()
Range("a1").AutoFilter field:=2, Criteria1:="新宿", Operator:=xlOr, Criteria2:="池袋"
End Sub
引数Operatorを使うことで、OR条件を付けることができます。
そしてもう一つの条件を引数Criteria2として池袋を設定します。
では実行してみましょう。
新宿と池袋が抽出することができました。
なお、引数が多くなって、読みにくくなってきました。
次のように省略してコードを書くこともできます。
Sub オートフィルターで新宿()
Range("a1").AutoFilter 2, "新宿", xlOr, "池袋"
End Sub
慣れてきたら、省略したほうがいいと思いますが、最初のうちは書いておく方が理解しやすくなります。
【条件が3つになるとエラーになる】
今度は、新宿・池袋・品川で抽出したい場合困ったことが発生します。Sub オートフィルターで新宿()
Range("a1").AutoFilter field:=2, Criteria1:="新宿", Operator:=xlOr, Criteria2:="池袋", Operator:=xlOr, Criteria3:="品川"
End Sub
これで実行すると、エラーが発生します。
書き方は池袋を追加したのと同じですが、エラーになってしまいます。
エラーの内容は、Criteria3という引数がない!
マクロでなく、今のExcelの操作では何ら問題がないのですが、現時点でのExcel VBAは、旧バージョンのExcel2003の使用のままなので、一つの列に2つの条件しか指定することができません。
要するに、3つ目の条件を設定することが、仕様上できない。
すでに、2020年をむかえるので、もしかしたら、Excel VBAも拡張する日が来るのかもしれません…
では、どのようにしたら、3つ以上の条件を付けることができるのでしょうか?
【3つ以上は配列を使う】
FOR TO NEXTを使わないコードで書いてみましょう。Sub オートフィルターで新宿()
Range("a1").AutoFilter field:=2, Criteria1:=Array("新宿", "池袋", "品川"), Operator:=xlFilterValues
End Sub
抽出条件に配列になるArray関数を使うことで、対応することができます。
実行してみると、
3つの条件でも抽出することができました。
このように簡単そうなことでも、条件がちょっと加わるだけで、変化がありますので、基本的なことから少しずつ慣れていくといいかもしれませんね。