本ページには広告が含まれています。

ExcelVBA Filter関数 指定した条件で配列を絞り込む

ExcelVBA Filter関数 指定した条件で配列を絞り込む

Excel VBAの「Filter 関数」について解説します。

スポンサーリンク

Filter 関数とは

Excel VBA の Filter 関数は、文字列配列を絞り込み (フィルタリング) したいときに使用します。文字列配列から指定した条件に一致する要素だけを抽出した新しい配列を返します。

Filter 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。

Filter 関数(Visual Basic for Applications リファレンス)

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。

構文

Filter(sourcesrray, match[, include[, compare]])

引数

引数 説明
sourcesrray【必須】検索対象の文字列の1次元配列を指定します
match【必須】抽出するための条件となる文字列を指定します
include【省略可能】省略時のデフォルトは True です
True : 条件に一致する要素を含めます
False : 一致しない要素を含めます
compare【省略可能】文字列の比較モードを指定します
※ 省略時の規定はバイナリモード(0)です
※ 詳細は [compare] 比較モード表を参照願います

※ バイナリ比較モードでは、全角半角、大文字小文字が区別されます。
※ テキスト比較モードでは、全角半角、大文字小文字が区別されません。
※ 引数 sourcearray が Null値 または1次元配列でない場合はエラーになります。

[compare] 比較モード

定数説明
vbBinaryCompare0バイナリモードで比較します【省略時の既定モード】
大/小文字、全/半角、ひらがな/カタカナを区別します
vbTextCompare1テキストモードで比較します
大/小文字、全/半角、ひらがな/カタカナを区別しません

※ vbUseCompareOption(-1)と vbDatabaseCompare(2)という設定もありますが、まず使用することは無いと思いますので説明を省略しています。

戻り値

戻り値説明
新しい配列
(Variant型)
条件に一致する要素を抽出した新しい配列を返します

Filter 関数による検索は 部分一致 で行われます。
※ 一致する文字列がなかった場合は、要素数 0 の配列を返します。
※ 作成される配列は動的配列で、最小インデックスは 0 スタートです。

解説(使用例)

Filter 関数の使い方をサンプルで確認していきましょう。

Filter関数サンプル (基本的な使用例)

まずは省略可能な引数オプション(include,compare)を省略した基本的な使用例です。
省略時のデフォルトは、include = True, compare = 0 です。

'■Filter関数サンプル (基本的な使い方例)
Sub Filter_Sample()
  Dim var As Variant
  Dim newvar() As String
    
  '▼商品IDの配列を作成
  var = Array("Aa0001", "Ab0021", "Ac0023", _
      "Ba0045", "Bb0045", "Bc0034", "Ca0015")
    
  '▼配列から"a"を含む要素をFilter関数で抽出
  newvar = Filter(var, "a") 'オプション省略

  '▼抽出後の新たな配列の中身を表示して確認
  Dim i As Long
  For i = LBound(newvar) To UBound(newvar)
    Debug.Print newvar(i)
  Next i
End Sub

オプション指定なし(指定文字列を含む、バイナリモード検索)の結果がこちらです。

Filter_Sample 実行時のイミディエイト画像

オプションを省略せずに設定した場合どのようになるのかを確認していきましょう。

では、Include = False に設定(”a” を含まない、バイナリモード検索)した場合の結果です。

Filter(var, "a", False, 0)
Include = False に設定した場合のイミディエイト画像

次は、Include = Truecompare をテキストモード (1) に変更(”a” を含む、テキストモード検索)にした場合がこちらです。※ テキストモードは大文字 “A”/小文字 “a” を区別しない検索モードです。

Filter(var, "a", True, 1)
テキストモード検索した場合のイミディエイト画像

さらに、Includeオプションを Falsecompareがテキストモード (1) に設定(指定文字列を含まない、テキストモード検索)にした場合がこちらです。

Filter(var, "a", False, 1)
Include=False, compare=テキストモードで検索した場合のイミディエイト画像

ワークシート関数のFILTERとの違い

混同されやすい VBAのFilter関数 と Excelワークシート関数のFILTERとの違いを表にまとめてみました。

特徴VBAのFilter関数ExcelワークシートのFILTER関数
使用方法VBAコード内で使用Excelシート上で数式として使用
対象一次元の文字列配列範囲または配列全体
一致方式部分一致完全一致
戻り値条件に一致する要素を新しい配列で返すフィルタリングされた範囲または配列
Include条件一致の要素を含めるかどうかを指定条件一致を決定する論理配列または範囲
Compare大文字小文字を無視するかどうかを指定一致しない場合に返す値を指定

サイト内の関連記事

サイト内の過去の記事を参考までに紹介しておきます。ご覧いただければ幸いです。

Excelワークシートで使う FILTER 関数の使用例を紹介した記事がこちらです。

VBA の Filter関数で二次元配列を処理する方法について紹介した記事がこちらです。

VBA でワークシートの新関数「FILTER」を使う方法についての記事がこちらです。

おわりに

Excel VBA の Filter 関数は、主に文字列の配列から特定の条件に一致する要素だけを抽出するために使用されます。フィルタリングされた結果を新しい配列として返します。オプションの引数設定により、条件に一致しない要素を抽出することもできます。

Filter 関数による検索は部分一致で行われます。条件に指定した文字列の一部が配列の要素に含まれていれば、その要素は抽出されます。

もし、完全一致で検索をさせたい場合には、VBAのループ処理を使って完全一致をチェックする方法を採用することが一般的です。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!