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] 比較モード
定数 | 値 | 説明 |
---|---|---|
vbBinaryCompare | 0 | バイナリモードで比較します【省略時の既定モード】 大/小文字、全/半角、ひらがな/カタカナを区別します |
vbTextCompare | 1 | テキストモードで比較します 大/小文字、全/半角、ひらがな/カタカナを区別しません |
※ 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
オプション指定なし(指定文字列を含む、バイナリモード検索)の結果がこちらです。
オプションを省略せずに設定した場合どのようになるのかを確認していきましょう。
では、Include = False に設定(”a” を含まない、バイナリモード検索)した場合の結果です。
Filter(var, "a", False, 0)
次は、Include = True 、compare をテキストモード (1) に変更(”a” を含む、テキストモード検索)にした場合がこちらです。※ テキストモードは大文字 “A”/小文字 “a” を区別しない検索モードです。
Filter(var, "a", True, 1)
さらに、Includeオプションを False 、compareがテキストモード (1) に設定(指定文字列を含まない、テキストモード検索)にした場合がこちらです。
Filter(var, "a", False, 1)
ワークシート関数のFILTERとの違い
混同されやすい VBAのFilter関数 と Excelワークシート関数のFILTERとの違いを表にまとめてみました。
特徴 | VBAのFilter関数 | ExcelワークシートのFILTER関数 |
---|---|---|
使用方法 | VBAコード内で使用 | Excelシート上で数式として使用 |
対象 | 一次元の文字列配列 | 範囲または配列全体 |
一致方式 | 部分一致 | 完全一致 |
戻り値 | 条件に一致する要素を新しい配列で返す | フィルタリングされた範囲または配列 |
Include | 条件一致の要素を含めるかどうかを指定 | 条件一致を決定する論理配列または範囲 |
Compare | 大文字小文字を無視するかどうかを指定 | 一致しない場合に返す値を指定 |
サイト内の関連記事
サイト内の過去の記事を参考までに紹介しておきます。ご覧いただければ幸いです。
Excelワークシートで使う FILTER 関数の使用例を紹介した記事がこちらです。
VBA の Filter関数で二次元配列を処理する方法について紹介した記事がこちらです。
VBA でワークシートの新関数「FILTER」を使う方法についての記事がこちらです。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA の Filter 関数は、主に文字列の配列から特定の条件に一致する要素だけを抽出するために使用されます。フィルタリングされた結果を新しい配列として返します。オプションの引数設定により、条件に一致しない要素を抽出することもできます。
Filter 関数による検索は部分一致で行われます。条件に指定した文字列の一部が配列の要素に含まれていれば、その要素は抽出されます。
もし、完全一致で検索をさせたい場合には、VBAのループ処理を使って完全一致をチェックする方法を採用することが一般的です。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;