Filter関数
Filter関数は配列から指定した文字列を含む要素を取得します。指定した文字列があった場合は、それらを配列として返却します。指定した文字列がなかった場合は、空の配列を返却します。Filter関数は要素は返しますが、配列の位置は返しません。
指定文字列がある配列の要素の位置を調べたい場合は「VBAで配列に指定文字列が存在する位置を調べる」をご参照ください。
構文
Function Filter(SourceArray, Match As String, [Include As Boolean = True], [Compare As VbCompareMethod = vbBinaryCompare]) As Variant
SourceArray | 検索対象の配列を指定します。
1次元配列に限ります。 1次元配列でない場合はエラーになります。 |
|||||||||
Match | 検索する文字列を指定します。 | |||||||||
Include 省略可 |
検索文字列を含む配列の要素を返す場合はTrue、含まない配列の要素を返す場合はFalseを返します。
省略時はTrueになります。 |
|||||||||
Compare 省略可 |
VbCompareMethod列挙型で比較モードを指定します。
省略時はOption Compareステートメントでの設定内容が採用されます。 Option Compareステートメントが未設定の場合はバイナリモード(vbBinaryCompare)が指定されます。 VbCompareMethod列挙型
省略時はバイナリモードで検索されます。 バイナリモードとテキストモードの違いは、大文字と小文字、全角と半角、ひらがなとカタカナを区別するかしないかです。 バイナリモードの場合は区別しますが、テキストモードの場合は区別しません。 |
|||||||||
戻り値 | 検索結果を配列で返します。
検索で一致するデータがない場合は空の配列を返します。 |
サンプルコード
要素数が6の1次元配列から指定文字があるデータをFilter関数で抽出するサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub FilterTest() Dim ar(5) Dim v ar(0) = "abc" ar(1) = "A" ar(2) = " a " ar(3) = " b " ar(4) = " B " ar(5) = " B " v = Filter(ar, "B", True, vbTextCompare) Dim s For Each s In v Debug.Print "[" & s & "]" Next End Sub |
実行結果
[abc]
[ b ]
[ B ]
[ B ]
Filter関数の用途
Filter関数の用途ですが、必要なデータが配列の中にいくつあるのか、ということを調べる場合には便利に利用できます。
Filter関数の戻り値は、検索一致データがあってもなくても必ず配列を返します。
データがない場合も空の配列を返します。
これを利用すると、戻り値の配列の要素数をUBound関数で取得した値に+1したものが検索に一致したデータ数になります。