8/05/2019

Excel。Excel VBAでオートフィルターを使いたい。文字列の抽出【Auto filter】

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つの条件でも抽出することができました。

このように簡単そうなことでも、条件がちょっと加わるだけで、変化がありますので、基本的なことから少しずつ慣れていくといいかもしれませんね。