ExcelVBA

配列で条件に「部分一致」した要素を取得する【Filter関数】【ExcelVBA】

Filter関数は配列から指定した文字列を含む配列だけを返します。
要素の検索をする場合や、フィルタリング(指定した文字列の要素数がどれくらいあるか)に使用します。

構文

Filter(SourceArray, Match, Include, Compare)

引数内容省略可否規定値
SourceArray検索対象の配列を指定(一次元配列以外はエラー)不可
Match検索する文字列
IncludeTRUE検索文字列を含む要素を返すTRUE
FALSE検索文字列を含まない要素を返す
ComparevbBinaryCompare大文字/小文字、全角/半角、ひらがな/カタカナを区別するvbBinaryCompare
vbTextCompare大文字/小文字、全角/半角、ひらがな/カタカナを区別しない

配列で条件に一致した要素を取得するサンプルコード

'■Filter関数で条件にあったデータを一次元配列に抽出する
Sub sample_Array_Filter()
    
    Dim arr(2) As String
    Dim f As Variant
    
    arr(0) = "ABC"
    arr(1) = "123"
    arr(2) = "abc"
    
    '■バイナリモードで比較する=ABCのみ抽出
    f = Filter(arr, "ABC", True, vbBinaryCompare)
    MsgBox f(0) '"ABC"

    '■テキストモードで比較する=ABC、abcを抽出
    f = Filter(arr, "ABC", True, vbTextCompare)
    MsgBox f(0) ' "ABC"
    MsgBox f(1) ' "abc"

    '■テキストモードでABCもしくはabcではないものを抽出=123を抽出
    f = Filter(arr, "ABC", False, vbTextCompare)
    MsgBox f(0) ' "123"

    '■配列内に指定文字列を含むかどうか判別する
    If (UBound(f) <> -1) Then
        MsgBox "指定文字列を含む配列が存在する"
    Else
        MsgBox "指定文字列を含む配列が存在しない"
    End If
    
End Sub

その他

  • Filter関数は一次元配列のみです。二次元配列や配列以外の場合はエラーが発生します。
■エラー内容
実行時エラー13 型が一致しません
検索時に一致するデータがない場合、空の配列(Ubound関数では-1と表示)が戻ってきます。

関連記事

一次元/二次元配列が空かどうか判定する【ExcelVBA】
一次元/二次元配列の要素数の最小値を取得する【Lbound関数】
一次元/二次元配列の要素数の最大値を取得する【Ubound関数】
「二次元配列を動的に行数(一次元目)を増やす」をパーツ化する【ExcelVBA】

コメント

タイトルとURLをコピーしました