Filter関数というものがある
Filter関数というものがある
こないだ、オブジェクト・ブラウザをぐりぐりやっていたら、「クラス」欄にStringsというものを発見。
ただし、オブジェクト・ブラウザ上では、「クラス」としてではなく、「モジュール」として記載されている。
Stringsを選ぶと、下の説明のところに、
Module StringsVBA のメンバー
と表示される。

ご覧のように、メンバとして見たことのあるメソッド(関数)名がズラリ。
へえ~。知らんかった。
Filter関数
だいたい、どこかで見たことのある関数名ばかりだったのだけれど、

この「Filter関数」というやつは、知らなかった。(……っていうか、有名?)
説明書きには、
Function Filter(SourceArray, Match As String, [Include As Boolean = True], [Compare As VbCompareMethod = vbBinaryCompare])
VBA.Stringsのメンバーreturn array of matches
とあるので、
- 配列を第1引数として受け取る
- 第1引数の配列の要素のうち、第2引数として受け取った文字列にマッチするものがあれば、それらの文字列を配列として返す
というものらしい。
使ってみた
次のコードで実験。
リスト1 標準モジュール
Public Sub testFilterFunction()
Dim ar1 As Variant
ar1 = Split("アホ ボケ カス デコスケ スットコドッコイ アホンダラ")
Dim ar2 As Variant
ar2 = Strings.Filter(ar1, "アホ", True)
Dim i As Long
For i = LBound(ar1) To UBound(ar2)
Debug.Print ar2(i)
Next
End Sub
配列変数ar1に突っ込んだ六つの文字列のうち、「アホ」を含むものを配列変数ar2に突っ込み、イミディエイト・ウインドウに表示するコード。
実行結果

おお!
おわりに
何か使いどころはあるかなあ。