#720 | 配列内を検索して指定文字列を含む要素があるか調べるには? | VBA | |
配列内を検索する方法はいくつかありますが、ここでは「Filter」関数を使って指定文字列がいずれかの要素にあるかどうかを調べ、その有無をBool値で返すサンプルプロシージャを紹介します。 「Filter」関数では、第1引数に指定した配列内に第2引数の値があるかどうかを調べます。その際、すべての文字が完全に一致している要素だけではなく、部分的に一致したものもヒットしたとカウントされます。 そして、見つかった配列要素内のデータが”検索結果の配列”に代入され返されます(※注)。もし複数の要素がヒットした場合にはその配列にも複数の要素が存在していることになります。一方、1件も見つからなかった場合には空の状態になりますので、その要素数をUBound関数で調べると「-1」が返されます。 ※注)”検索結果の配列”の内容を調べることで、該当した元の配列のデータ内容を取得することもできます。 Public Function ArrayFilter(ArrayData As Variant, strKeyword As String) As Boolean '概要 配列内の探索をFilter関数を使って行う '引数 ArrayDat : 検索する配列データ ' strKeyword : 検索する値 '返値 いずれかの要素にあればTrue、なければTrue Dim avarFind As Variant 'Filterで検索してヒットした要素のデータを配列にセット avarFind = Filter(ArrayData, strKeyword) 'ヒット結果の配列があるかどうかで返り値を設定 ArrayFilter = (UBound(avarFind) > -1) '下記はデバッグ用 Debug.Print "ヒット件数: " & UBound(avarFind) + 1 End Function 下記はサンプルプロシージャを呼び出す例です。事前に配列を用意し、検索する文字列とともに上記のArrayFilterプロシージャを呼び出しています。 Sub ArrayFilterTest() Dim aDat As Variant aDat = Array("茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都") Debug.Print "検索結果 : " & ArrayFilter(aDat, "千葉県") Debug.Print "検索結果 : " & ArrayFilter(aDat, "栃木県") Debug.Print "検索結果 : " & ArrayFilter(aDat, "東京都") Debug.Print "検索結果 : " & ArrayFilter(aDat, "東京") Debug.Print "検索結果 : " & ArrayFilter(aDat, "東京都千代田区") Debug.Print "検索結果 : " & ArrayFilter(aDat, "静岡") Debug.Print "検索結果 : " & ArrayFilter(aDat, "県") End Sub
参考: 配列内を1つずつループで探索して合致するものがあるかどうかを判別したい場合には、「#355 配列内の探索を行うプロシージャ例」のような方法もあります。 |
|||
|
Copyright © T'sWare All rights reserved |