VB6・VBA関数メモ:Filter関数

Filter関数についてメモしておきます。

この関数では配列内の文字列を検索して要素を抽出することができます。
一括して処理をしてくれるのでなかなか便利です。

ただし、検索された文字列の位置を取得する場合は個別にInStr関数を実行する必要があります。


概要

Filter(SourceArray, Match As String, [Include As Boolean = True], _
                    [Compare As VbCompareMethod = vbBinaryCompare]])
機能 文字列配列から指定の文字を含む または 含まない要素を検索
引数 SourceArray 検索対象の文字列配列 Variant型
Match 検索する文字列 String型
Include (省略時はTrue)
True:SourceArrayからMatchを含む要素を検索
False:SourceArrayからMatchを含まない要素を検索
Boolean型
Compare (省略時はvbBinaryCompare)
比較モードの定数
vbBinaryCompare列挙体
戻り値 検索した文字列 Variant型


vbBinaryCompare列挙体

定数名 説明
vbUseCompareOption -1 Option Compare ステートメントの設定を使用
vbBinaryCompare 0 (規定値)
バイナリモード
※大文字と小文字、半角と全角、ひらがなとカタカナを区別する
vbTextCompare 1 テキストモード
※大文字と小文字、半角と全角、ひらがなとカタカナを区別しない
vbDatabaseCompare 2 (Accessのみ)
DBに格納されている設定に基づいて比較


使用例

説明 記述例 出力
指定の文字列を含む要素を検索 Dim src, dst, i

src = Array("abc", "bcd", "cde")
dst = Filter(src, "bc")

For i = LBound(dst) To UBound(dst)
   Debug.Print dst(i)
Next i
"abc"
"bcd"
Dim src, dst, i

src = Array("abc", "bcd", "cde")
dst = Filter(src, "bc", True)

For i = LBound(dst) To UBound(dst)
   Debug.Print dst(i)
Next i
"abc"
"bcd"
指定の文字列を含まない要素を検索 Dim src, dst, i

src = Array("abc", "bcd", "cde")
dst = Filter(src, "bc", False)

For i = LBound(dst) To UBound(dst)
   Debug.Print dst(i)
Next i
"cde"
文字と小文字、半角と全角、ひらがなとカタカナを区別して検索 Dim src, dst, i

src = Array("abc", "BcD", "cDe")
dst = Filter(src, "bc", , vbBinaryCompare)

For i = LBound(dst) To UBound(dst)
   Debug.Print dst(i)
Next i
"abc"
文字と小文字、半角と全角、ひらがなとカタカナを区別しないで検索 Dim src, dst, i

src = Array("abc", "BcD", "cDe")
dst = Filter(src, "bc", , vbTextCompare)

For i = LBound(dst) To UBound(dst)
   Debug.Print dst(i)
Next i
"abc"
"BcD"


動作検証

説明 記述例 出力
Variant型内の数値でも検索可能
ただし戻り値は文字列となっている
Dim src, dst, i

src = Array(123, 234, 345)
dst = Filter(src, 23)

For i = LBound(dst) To UBound(dst)
   Debug.Print dst(i)
Next i
"123"
"234"
Variant型/String型の配列以外の場合はエラー Dim src(2) As Variant, dst

src(0) = "abc"
src(1) = "bcd"
src(2) = "cde"

dst = Filter(src, "bc")

For i = LBound(dst) To UBound(dst)
   Debug.Print dst(i)
Next i
"abc"
"bcd"
Dim src(2) As String, dst

src(0) = "abc"
src(1) = "bcd"
src(2) = "cde"

dst = Filter(src, "bc")

For i = LBound(dst) To UBound(dst)
   Debug.Print dst(i)
Next i
"abc"
"bcd"
Dim src(2) As Integer, dst

src(0) = 123
src(1) = 234
src(2) = 345

dst = Filter(src, 23)
エラー
Dim src(2) As Date, dst

src(0) = #2011/12/18#
src(1) = #2011/12/19#
src(2) = #2011/12/20#

dst = Filter(src, "2011")
エラー


コメント
コメントする








    
この記事のトラックバックURL
トラックバック