Filter関数というものがある

Filter関数というものがある

こないだ、オブジェクト・ブラウザをぐりぐりやっていたら、「クラス」欄にStringsというものを発見。

ただし、オブジェクト・ブラウザ上では、「クラス」としてではなく、「モジュール」として記載されている。

Stringsを選ぶと、下の説明のところに、

Module Strings

VBA のメンバー

と表示される。

f:id:akashi_keirin:20190401075127j:plain

ご覧のように、メンバとして見たことのあるメソッド(関数)名がズラリ。

へえ~。知らんかった。

Filter関数

だいたい、どこかで見たことのある関数名ばかりだったのだけれど、

f:id:akashi_keirin:20190401075131j:plain

この「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に突っ込み、イミディエイト・ウインドウに表示するコード。

実行結果

f:id:akashi_keirin:20190401075136j:plain

おお!

おわりに

何か使いどころはあるかなあ。