大体でIT
大体でIT
Excel VBAで、オートフィルタを複数条件で絞り込みする方法について、ご紹介します。2つの条件で絞り込みするには、「xlAnd」や「xlOr」の「論理演算子」を使います。3つ以上を絞りこみする場合は、「配列」を使って絞り込みです。複雑な条件でフィルタしたい場合は、作業列を使いましょう。
この記事では、VBAを使ってオートフィルタを複数条件でフィルタする方法について、ご紹介します。
オートフィルタを複数条件でフィルタするには、2つの方法があります。
2つの条件でフィルタしたい場合は、「論理演算子」を使います。
3つ以上でフィルタしたい場合は、「配列」を使うことになります。
3以上の条件でフィルタしたいという場合は、作業列が必要となります。
状況に応じて「論理演算子」と「配列」を使っていきましょう。
では、VBAを使ってオートフィルタを複数条件でフィルタする方法について、解説していきます。
- VBAを使ってオートフィルタを複数条件でフィルタする方法
オートフィルタを複数条件でフィルタするVBAコードについて、まとめています。
VBAコードだけ確認したい場合に、ご活用ください。
'論理演算子を使う
Range("B2").AutoFilter 2, ">=300", xlAnd, "<=700" '「xlAnd」条件でフィルタ
Range("B2").AutoFilter 2, "<300", xlOr, ">700" '「xlOr」条件でフィルタ
'配列を使う
Range("B2").AutoFilter 1, Array("東京都", "北海道", "福岡県"), xlFilterValues
オートフィルタで2つの条件で絞り込みするには、論理演算子を使います。
- xlAnd:AND条件で絞り込み
- xlOr:OR条件で絞り込み
Sub TEST1()
'「xlAnd」条件でフィルタ
Range("B2").AutoFilter 2, ">=300", xlAnd, "<=700"
End Sub
元データ
「300以上」かつ「700以下」でフィルタ
「300以上」かつ「700以下」でフィルタできました。
Sub TEST2()
'「xlOr」条件でフィルタ
Range("B2").AutoFilter 2, "<300", xlOr, ">700"
End Sub
「300より小さい」もしくは「700より大きい」でフィルタ
「300より小さい」もしくは「700より大きい」でフィルタできました。
条件が2つある場合は、「xlAnd」か「xlOr」を使ってフィルタしましょう。
オートフィルタで「3つ以上」で絞り込みをするには、「配列」を使います。
配列を使って絞り込みするには、次のように入力します。
'配列でフィルタする
Range(表の左上のセル).AutoFilter 列番号, 配列, xlFilterValues
「第2引数」に入力する配列は、「一次元配列」とします。
「第3引数」には、「xlFilterValues」を入力します。
配列を使ってフィルタする場合は、「=」とする値だけをフィルタできます。
なので、ワイルドカード、比較演算子、論理演算子は使えません。
「配列」を使って「3つ」をフィルタ
「配列」を使って「3つ」の値をフィルタしてみます。
Sub TEST3()
'3つの値でフィルタ
Range("B2").AutoFilter 1, Array("東京都", "北海道", "福岡県"), xlFilterValues
End Sub
ワイルドカードは使えない
配列でフィルタする際に、「ワイルドカード」は使えません。
Sub TEST4()
'ワイルドカードは使えない
Range("B2").AutoFilter 1, Array("*都", "*道", "*府"), xlFilterValues
End Sub
ワイルドカードを使っても、うまくフィルタすることはできません。
比較演算子は使えない
配列と「比較演算子」を、組み合わせて使うことができません。
Sub TEST5()
'比較演算子は使えない
Range("B2").AutoFilter 2, Array(">=700", "550", "<=300"), xlFilterValues
End Sub
論理演算子は使えない
Sub TEST6()
'論理演算子は使えない
Range("B2").AutoFilter 1, Array("東京都", "北海道", "福岡県"), xlOr, Array("千葉県", "静岡県", "新潟県"), xlFilterValues
End Sub
セルから値を取得すると「2次元配列」となってしまうので、「WorksheetFunction.Transpose」で「1次元配列」に変換します。
Sub TEST7()
'セルの値を取得
a = WorksheetFunction.Transpose(Range("B1:B3")) '1次配列に変換
'セルの値でフィルタ
Range("B5").AutoFilter 1, a, xlFilterValues
End Sub
セルに値を入力
セルの値でフィルタできた
セルの値を使ってフィルタをすれば、フィルタできる幅が広がります。
この記事では、VBAを使ってオートフィルタを複数条件でフィルタする方法について、ご紹介しました。
オートフィルタを複数条件でフィルタするには、2つの方法があります。
2つの条件でフィルタしたい場合は、「論理演算子」を使います。
3つ以上でフィルタしたい場合は、「配列」を使うことになります。
3以上の条件でフィルタしたいという場合は、作業列が必要となります。
状況に応じて「論理演算子」と「配列」を使っていきましょう。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。