サイトについて      連絡先   検索

VBA Filter 関数

はじめに

Excel VBA マクロの Filter 関数を紹介します。

Filter 関数は、文字列の配列から指定した文字列だけを含む配列を返します。

文字列の配列を絞り込み (フィルタリング) したいときに使用します。

構文

Filter(文字列型配列, フィルタ文字)
文字列型配列からフィルタ文字と一致する要素の配列を作成します。

Filter(文字列型配列, フィルタ文字, 含む, 比較モード)
フィルタ文字含む含まないか指定できます。比較モードで大文字と小文字を区別するか指定できます。

引数「文字列型」文字列型 (String) を指定します。
引数「フィルタ文字」フィルタリングする文字列を指定します。
引数「含む」省略できます。
True または省略: 引数「フィルタ文字」を含む配列を返します。
False: 引数「フィルタ文字」を含まない配列を返します。
引数「比較モード」省略できます。フィルタリングに大文字と小文字を区別するか指定します。
戻り値の型文字列型 (String) の配列

引数「比較モード」

単位 説明
vbBinaryCompare (既定)「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別する。
vbTextCompare区別しない。

解説

戻り値を受け取る変数は、String 型の動的配列か Variant 型である必要があります。

文字列型配列にフィルタ文字が一つもなかったときは要素数 0 の空の配列を返します。

文字列型配列には一次元配列のみ指定できます。二次元配列を指定するとエラーが発生します。

フィルタリングされた配列の要素数は、フィルタ文字に一致した数と同じです。

使用例


Dim s(3) As String
s(0) = "ABC DEF"
s(1) = "abc 123"
s(2) = "123 ABC"
s(3) = "あいう 123"

Dim f() As String
f = Filter(s, "ABC")
Debug.Print(f(0)) ' "ABC DEF"
Debug.Print(f(1)) ' "123 ABC"

f = Filter(s, "ABC", False)
Debug.Print(f(0)) ' "abc 123"
Debug.Print(f(1)) ' "あいう 123"

f = Filter(s, "ABC", True, vbTextCompare)
Debug.Print(f(0)) ' "ABC DEF"
Debug.Print(f(1)) ' "abc 123"
Debug.Print(f(2)) ' "123 ABC"

f = Filter(s, "TEST")  
Debug.Print (UBound(f)) ' -1 要素なし