Filter関数というものがある
Filter関数というものがある
こないだ、オブジェクト・ブラウザをぐりぐりやっていたら、「クラス」欄にStrings
というものを発見。
ただし、オブジェクト・ブラウザ上では、「クラス」としてではなく、「モジュール」として記載されている。
Strings
を選ぶと、下の説明のところに、
Module Strings
VBA のメンバー
と表示される。
ご覧のように、メンバとして見たことのあるメソッド(関数)名がズラリ。
へえ~。知らんかった。
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
に突っ込み、イミディエイト・ウインドウに表示するコード。
実行結果
おお!
おわりに
何か使いどころはあるかなあ。