Flat lay of business concept
Excelで大量のデータを扱う際、「特定の条件に合う行だけを抽出したい」という場面は多くあります。例えば「担当者がAさんで、かつ売上が100万円以上」といった複数の条件を組み合わせて検索したい時、手作業でフィルターをかけるのは効率が悪いです。そこで便利なのがVBAを使った自動フィルターの活用です。VBAを使えば、複数条件の設定や繰り返し処理も自動化でき、業務効率を大きく改善できます。本記事では、Excel VBAで複数条件フィルターを使う方法を、サンプルコードとともにわかりやすく解説します。初心者の方でも理解できるように、基礎から応用まで順を追って説明しますので、ぜひ業務に活かしてください。
Excelには標準で「オートフィルター」という機能が用意されています。これは列ごとにプルダウンを表示し、特定の条件でデータを絞り込む機能です。例えば「商品名がリンゴのデータだけを表示する」といった使い方ができます。
しかし手作業でフィルターを設定する場合、毎回プルダウンを開いて条件を指定しなければならず、大量のデータ処理には向きません。そこで登場するのがVBAによるフィルターの自動化です。VBAを使えば、条件をプログラムに書いておき、ワンクリックで複数条件を適用できます。
VBAでオートフィルターを使うには、以下のような構文を使います。
Range("A1:D100").AutoFilter Field:=2, Criteria1:="=東京"
この例では、A1:D100の範囲にフィルターを設定し、2列目(B列)のデータが「東京」と一致するものだけを抽出します。
ポイントは以下の2つです。
これを組み合わせることで、複数の条件も設定できるようになります。
複数条件を扱うには、Criteria1とCriteria2を使います。例えば「担当者がAさん、またはBさん」の場合は以下のように書けます。
Range("A1:D100").AutoFilter Field:=3, Criteria1:="Aさん", Operator:=xlOr, Criteria2:="Bさん"
ここで重要なのがOperatorの指定です。
このように、フィルターで複数条件を組み合わせることができます。
例えば以下のような売上表があったとします。
日付 | 商品 | 担当者 | 売上 |
---|---|---|---|
1/5 | リンゴ | Aさん | 120 |
1/6 | バナナ | Bさん | 80 |
1/7 | リンゴ | Aさん | 200 |
1/8 | バナナ | Cさん | 150 |
ここから「担当者がAさんで、かつ売上が100以上」を抽出する場合のコードは以下の通りです。
Sub FilterExample()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Range("A1:D100").AutoFilter
ws.Range("A1:D100").AutoFilter Field:=3, Criteria1:="Aさん"
ws.Range("A1:D100").AutoFilter Field:=4, Criteria1:=">=100"
End Sub
これにより、Aさんのデータかつ売上が100以上の行だけが表示されます。
Criteria1とCriteria2では最大2つまでしか条件を指定できません。もし「Aさん、Bさん、Cさん」をまとめて指定したい場合は、配列を使います。
Range("A1:D100").AutoFilter Field:=3, Criteria1:=Array("Aさん", "Bさん", "Cさん"), Operator:=xlFilterValues
このように書くと、3つ以上の条件を一度に設定できます。実務ではこの書き方がとても便利です。
完全一致だけでなく、部分一致でも複数条件を設定できます。例えば「商品名に『リン』を含むもの、または『バナナ』を含むもの」という場合は次のように書きます。
Range("A1:D100").AutoFilter Field:=2, Criteria1:="=*リン*", Operator:=xlOr, Criteria2:="=*バナナ*"
ワイルドカードを使うことで、柔軟に条件を設定することができます。
*
… 任意の文字列?
… 任意の1文字日付を扱う場合も複数条件が必要になることがあります。例えば「2023/1/1以上、かつ2023/1/31以下」のデータを抽出する場合は次の通りです。
Range("A1:D100").AutoFilter Field:=1, Criteria1:=">=2023/1/1", Operator:=xlAnd, Criteria2:="<=2023/1/31"
このように書くことで、1月分のデータだけを抽出できます。
フィルターを解除したいときは以下のように書きます。
ActiveSheet.AutoFilterMode = False
これでシート全体のフィルターが解除され、すべてのデータが表示されます。
複数条件フィルターは、さまざまな業務で役立ちます。
繰り返し条件を指定する作業を自動化すれば、毎日の集計作業が大幅に効率化されます。
本記事では、Excel VBAを使った複数条件フィルターの方法について解説しました。
ポイントをまとめると以下の通りです。
複数条件を使いこなせば、業務の効率化につながります。ぜひ実際の仕事に活かしてみてください。