Excel VBAで同じフィールド(列)に複数の条件を指定してオートフィルターする4つの方法
Excelのオートフィルター(AutoFilter)機能は、特定の条件に基づいてデータを抽出できる非常に便利なツールです。その中でもVBAマクロを使った操作は、最も効率的かつ高速で安全な方法として知られています。本記事では、同じフィールド(列)に対して複数の条件を指定してVBAでオートフィルターを実行する4つの方法を詳しく解説します。
サンプルワークブックのダウンロード
練習用の無料Excelワークブックは、こちらからダウンロードできます。
VBAを使って同じ列に複数条件でオートフィルターをかける4つの方法
このセクションでは、同じ列に対して、複数の数値や文字列による絞り込み、さらにAND演算子やOR演算子を使った条件指定を行う4つのパターンを、具体的なコードとともに学んでいきます。
1. 同じ列に複数の数値条件を指定してオートフィルターするVBA
次のようなデータセットを想定します。B列にはランダムな数値が入力されており、D列には奇数のみが格納されています。ここでは、D列の値を条件としてB列をフィルタリングします。つまり、D列にある奇数を基準に、B列のランダムな数値から該当する値だけを抽出します。

それでは、VBAでの実装手順を見ていきましょう。
手順:
- まず、キーボードで Alt + F11 を押すか、リボンの「開発」→「Visual Basic」を選択してVisual Basic Editor(VBE)を開きます。

- 次に、表示されたコードウィンドウでメニューバーから「挿入」→「標準モジュール」をクリックします。

- 続いて、以下のコードをコピーしてコードウィンドウに貼り付けます。
Sub AutoFilterWithMultipleCriteriaOnSameColumn()
Dim iArray As Variant
With ThisWorkbook.Worksheets("Column")
iArray = Split(Join(Application.Transpose(.Range(.Cells(5, 4), .Cells(.Range("D:D").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row, 4)).Value)))
.Range("B4").AutoFilter Field:=1, Criteria1:=iArray, Operator:=xlFilterValues
End With
End Sub
これでコードを実行する準備が整いました。

- キーボードのF5キーを押すか、メニューバーから「実行」→「Sub/ユーザーフォームの実行」を選択してマクロを実行します。サブメニューバーの小さな実行アイコンをクリックしても構いません。

コードが正常に実行されると、以下の画像のような結果になります。

ご覧のとおり、B列は奇数のみでフィルタリングされました。
同様のコードで偶数によるフィルタリングも可能です。その場合は、奇数の代わりに偶数を別の列に格納してください。
VBAコードの解説
Dim iArray As Variant
配列用の変数を定義しています。
With ThisWorkbook.Worksheets("Column")
操作対象のワークシート名を宣言しています(「Column」がデータセットのシート名です)。実際の環境に合わせてシート名を書き換えてください。
iArray = Split(Join(Application.Transpose(.Range(.Cells(5, 4), .Cells(.Range("D:D").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row, 4)).Value)))
D列のD5セル以降に格納された条件値を取得し、定義した配列に格納しています。
.Range("B4").AutoFilter Field:=1, Criteria1:=iArray, Operator:=xlFilterValues
End With
- B4セルから始まるB列を、配列に格納された複数の条件に基づいてフィルタリングします。
- その後、Withステートメントを抜けて処理を終了します。
関連記事: Excel VBAでオートフィルターが有効かどうかを確認する方法(4選)
2. AND演算子を使って同じ列に複数条件でオートフィルターするVBA
ExcelのxlAND演算子は2つの条件を扱い、両方の条件を満たす値のみを返します。
ここでも次のようなデータセットを想定します。B列にはランダムな数値が入力されており、D4:E5の範囲に2つの条件を設定しました。条件は、「B列の値が2以上(E4セルの値)」かつ「9以下(E5セルの値)」であることです。AND演算子を使って、この条件でB列をフィルタリングします。

手順は以下のとおりです。
手順:
- 前のセクションと同様に、「開発」タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- 続いて、以下のコードをコピーしてコードウィンドウに貼り付けます。
Sub AutoFilterOnSameColumnWithAND()
With ThisWorkbook.Worksheets("AND")
.Range("B4").AutoFilter Field:=1, Criteria1:=">=" & .Range("E4").Value, Operator:=xlAnd, Criteria2:="<=" & .Range("E5").Value
End With
End Sub
これでコードを実行できます。

- 先ほどと同じ要領でマクロを実行すると、下の画像のような結果が得られます。

コードの実行後、B列は両方の条件を満たす「2~9」の範囲の値のみでフィルタリングされました。
VBAコードの解説
With ThisWorkbook.Worksheets("AND")
.Range("B4").AutoFilter Field:=1, Criteria1:=">=" & .Range("E4").Value, Operator:=xlAnd, Criteria2:="<=" & .Range("E5").Value
End With
このコードは、
- まず、操作対象のワークシート名を宣言しています(「AND」がデータセットのシート名です)。実際の環境に合わせて書き換えてください。
- 次に、E4セルとE5セルに格納された複数の条件をxlAnd演算子で組み合わせ、B4セルから始まるB列をフィルタリングします。
- その後、Withステートメントを抜けて処理を終了します。
関連記事: [解決法] RangeクラスのAutoFilterメソッドが失敗するときの対処法(5選)
3. OR演算子を使って同じ列に複数条件でオートフィルターするマクロ
ExcelのxlOR演算子も2つの条件を扱いますが、xlANDとは異なり、いずれか一方の条件を満たす値をすべて返します。
今回もB列にランダムな数値があり、D4:E5の範囲に2つの条件を設定したデータセットを使用します。条件は、「B列の値が12以上(E4セルの値)」または「7以下(E5セルの値)」のどちらかを満たすことです。OR演算子を使ってB列をフィルタリングしてみましょう。

手順は以下のとおりです。
手順:
- これまでと同様に、「開発」タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- 続いて、以下のコードをコピーしてコードウィンドウに貼り付けます。
Sub AutoFilterOnSameColumnWithOR()
With ThisWorkbook.Worksheets("OR")
.Range("B4").AutoFilter Field:=1, Criteria1:="<" & .Range("E5").Value, Operator:=xlOr, Criteria2:=">" & .Range("E4").Value
End With
End Sub
これでコードを実行する準備ができました。

- マクロを実行すると、下の画像のような出力結果になります。

コードの実行後、B列は「12以上」または「7以下」のいずれかの条件を満たす値のみでフィルタリングされました。
VBAコードの解説
With ThisWorkbook.Worksheets("OR")
.Range("B4").AutoFilter Field:=1, Criteria1:="<" & .Range("E5").Value, Operator:=xlOr, Criteria2:=">" & .Range("E4").Value
End With
このコードは、
- まず、操作対象のワークシート名を宣言しています(「OR」がデータセットのシート名です)。実際の環境に合わせて書き換えてください。
- 次に、E4セルとE5セルに格納された複数の条件をxlOr演算子で組み合わせ、B4セルから始まるB列をフィルタリングします。
- その後、Withステートメントを抜けて処理を終了します。
関連記事: Excel VBAでオートフィルター後に表示行をコピーする方法
4. 同じフィールドで複数のテキスト値を基準にオートフィルターするVBA
次のデータセットを見てください。B列には国名が入力されています。今回は、マクロ内に直接記述した国名を条件として、この列をフィルタリングします。具体的には、「Australia(オーストラリア)」と「England(イングランド)」という2つの国名でオートフィルターを実行します。

手順は以下のとおりです。
手順:
- まず、「開発」タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- 続いて、以下のコードをコピーしてコードウィンドウに貼り付けます。
Sub AutoFilterOnSameColumnWithMultipleTexts()
Dim iArray As Variant
iArray = Array("Australia", "England")
Range("B4", Range("B" & Rows.Count).End(xlUp)).AutoFilter 1, iArray, xlFilterValues, , 0
End Sub
これでコードを実行できます。

- 次に、マクロを実行し、下の画像で結果を確認してみましょう。

その結果、多くの国名が入力されていたB列が、コード内で指定した2つの国名――AustraliaとEngland――だけでフィルタリングされました。
VBAコードの解説
Dim iArray As Variant
配列用の変数を定義しています。
iArray = Array("Australia", "England")
フィルタリングの基準となるテキスト条件を、定義した配列に格納しています。
Range("B4", Range("B" & Rows.Count).End(xlUp)).AutoFilter 1, iArray, xlFilterValues, , 0
B4セルから始まるB列を、配列にハードコードされた複数のテキスト条件に基づいてフィルタリングしています。
関連記事: Excel VBAで特定の値以外をオートフィルターする方法
まとめ
今回は、VBAマクロを使って同じフィールド(列)に複数の条件を指定してオートフィルターを実行する4つの方法をご紹介しました。数値条件・AND演算子・OR演算子・複数テキスト値のそれぞれのケースで活用できますので、ぜひ日々の業務にお役立てください。本記事が皆さまのお役に立てば幸いです。内容に関するご質問があれば、お気軽にお問い合わせください。
関連記事
- VBAオートフィルター:昇順(最小値から最大値)に並べ替える3つの方法
- Excel VBA:オートフィルターが存在する場合に解除する7つの例
-
Excelで複数の色を条件にデータをフィルターする2つの簡単な方法
この記事では、Microsoft Excelで複数の色を条件にデータをフィルターする方法を解説します。通常、特定の列を複数の色でフィルターすると、他の列も最初に適用したフィルターの影響を受けてしまい、思い通りの結果が得られないことがあります。色による複数条件のフィルタリングは少し工夫が必要ですが、この記事では誰でも実践できる2つの方法を、わかりやすい手順とともに紹介します。 Excelで複数の色を条件にフィルターする2つの方法 ここでは、営業担当者の氏名、担当地域、売上高がそれぞれB列・C列・E列に入力されたサンプルデータセットを使用します。このデータには、セルごとに異なる色が設定されています
-
Excelで列データを区切り文字付きテキストに変換する5つの方法
Excelのシートで、縦方向(列)に入力されたリストを横並びのテキストとして整理したい場面はよくあります。その際、各項目をつなぐために区切り文字が必要になります。最も一般的なのはカンマ(,)ですが、セミコロンなどを使う場合もあります。残念ながら、Excelには列を区切り文字付きテキストへ一発で変換する専用機能は用意されていません。そこで本記事では、5つの簡単な方法で列データを区切り文字付きテキストに変換する手順を詳しく解説します。 Excelで列を区切り文字付きテキストに変換する5つの方法 この記事では、以下の5つのアプローチを順番に紹介します。 TEXTJOIN関数を使う方法 CONCAT