大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、オートフィルタを複数条件で絞り込みする方法について、ご紹介します。2つの条件で絞り込みするには、「xlAnd」や「xlOr」の「論理演算子」を使います。3つ以上を絞りこみする場合は、「配列」を使って絞り込みです。複雑な条件でフィルタしたい場合は、作業列を使いましょう。

はじめに

この記事では、VBAを使ってオートフィルタを複数条件でフィルタする方法について、ご紹介します。

オートフィルタを複数条件でフィルタするには、2つの方法があります。

  • 論理演算子を使う
  • 配列を使う

という感じです。

2つの条件でフィルタしたい場合は、「論理演算子」を使います。

3つ以上でフィルタしたい場合は、「配列」を使うことになります。

3以上の条件でフィルタしたいという場合は、作業列が必要となります。

状況に応じて「論理演算子」と「配列」を使っていきましょう。

では、VBAを使ってオートフィルタを複数条件でフィルタする方法について、解説していきます。

この記事で紹介すること

  • 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つの条件で絞り込み

オートフィルタで2つの条件で絞り込みするには、論理演算子を使います。

論理演算子は、2種類あります。

  • xlAnd:AND条件で絞り込み
  • xlOr:OR条件で絞り込み

という感じです。

では、それぞれで、フィルタしてみます。

「xlAnd」を使ってフィルター

「xlAnd」を使ってフィルターしてみます。

Sub TEST1()
    
    '「xlAnd」条件でフィルタ
    Range("B2").AutoFilter 2, ">=300", xlAnd, "<=700"
    
End Sub

元データを用意しておきます。

元データ

元データ

実行してみます。

「300以上」かつ「700以下」でフィルタ

「300以上」かつ「700以下」でフィルタ

「300以上」かつ「700以下」でフィルタできました。

「xlOr」を使ってフィルター

「xlOr」を使ってフィルターしてみます。

Sub TEST2()
    
    '「xlOr」条件でフィルタ
    Range("B2").AutoFilter 2, "<300", xlOr, ">700"
    
End Sub

VBAコードを実行してみます。

「300より小さい」もしくは「700より大きい」でフィルタ

「300より小さい」もしくは「700より大きい」でフィルタ

「300より小さい」もしくは「700より大きい」でフィルタできました。

条件が2つある場合は、「xlAnd」か「xlOr」を使ってフィルタしましょう。

オートフィルタで3つ以上で絞り込み

オートフィルタで「3つ以上」で絞り込みをするには、「配列」を使います。

配列を使って絞り込み

配列を使って絞り込みするには、次のように入力します。

'配列でフィルタする
Range(表の左上のセル).AutoFilter 列番号, 配列, xlFilterValues

「第2引数」に入力する配列は、「一次元配列」とします。

「第3引数」には、「xlFilterValues」を入力します。

「=」だけ使える

配列を使ってフィルタする場合は、「=」とする値だけをフィルタできます。

なので、ワイルドカード、比較演算子、論理演算子は使えません。

「配列」を使って「3つ」をフィルタ

「配列」を使って「3つ」の値をフィルタしてみます。

Sub TEST3()
    
    '3つの値でフィルタ
    Range("B2").AutoFilter 1, Array("東京都", "北海道", "福岡県"), xlFilterValues
    
End Sub

元データを用意しておきます。

元データ

では、VBAコードを実行してみます。

「配列」を使って「3つ」をフィルタ

「配列」を使って「3つ」をフィルタできました。

ワイルドカードは使えない

配列でフィルタする際に、「ワイルドカード」は使えません。

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コードを実行してみます。

セルの値でフィルタできた

セルの値でフィルタできた

セルの値でフィルタできました。

セルの値を使ってフィルタをすれば、フィルタできる幅が広がります。

おわりに

この記事では、VBAを使ってオートフィルタを複数条件でフィルタする方法について、ご紹介しました。

オートフィルタを複数条件でフィルタするには、2つの方法があります。

  • 論理演算子を使う
  • 配列を使う

という感じです。

2つの条件でフィルタしたい場合は、「論理演算子」を使います。

3つ以上でフィルタしたい場合は、「配列」を使うことになります。

3以上の条件でフィルタしたいという場合は、作業列が必要となります。

状況に応じて「論理演算子」と「配列」を使っていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す