- 公開日:2017-3-9 最終更新日:2017-3-2
- プロナビTOP / プログラミング初心者向け技術系ノウハウ・まとめ

VBAで配列の内容を検索する方法についてご説明します。
配列内で該当する条件のデータを探す場合はループ処理で1つずつデータを確認する方法と
Filter関数を使用する方法があります。それでは、詳しい手順について確認してみましょう。
ループ処理で配列を検索する方法
<コード>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Dim myData(5) As String ‘検索対象となる配列を定義’ Dim i As Integer ‘ループ処理用の変数’ ‘配列へ値を格納’ myData(0) = “佐藤” myData(1) = “植田” myData(2) = “内藤” myData(3) = “百田” myData(4) = “三田” myData(5) = “宍戸” ‘ループ処理で配列を検索’ For i = LBound(myData) To UBound(myData) ‘『田』という文字が含まれている場合’ If InStr(myData(i), “田”) <> 0 Then MsgBox i + 1 & “番目のデータ『” & myData(i) & “』には” & vbCrLf & _ “『田』が含まれています。” Exit For ‘検索終了 End If Next i |
<実行例>

例では配列をループ処理で一つずつチェックし、If文の条件と当てはまる文字列が見つかったらメッセージを表示しています。
ちなみにこのコードでは検索条件にヒットした最初の1件でループ処理を中断していますが、
Exit Forを削除すると配列の最後まで検索を継続することができます。
Filter関数を使用して配列を検索する方法
Filter関数は1つ目の引数で指定した配列について、2つ目の引数で指定した文字列が含まれる要素を配列にして戻り値として返します。
というわけで、戻り値は配列を格納することができるバリアント型の変数で取得します。
また検索条件に当てはまるデータが無い場合は戻り値の配列に値が格納されていないため、UBound関数で要素数の最大値を調べると-1を返します。
<コード>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Dim myData(5) As String ‘検索対象となる配列を定義’ Dim i As Integer ‘ループ処理用の変数’ Dim target_Str As String ‘検索文字’ Dim myResult As Variant ‘検査条件を満たすデータを格納する配列 ‘配列へ値を格納‘ myData(0) = “佐藤” myData(1) = “植田” myData(2) = “内藤” myData(3) = “百田” myData(4) = “三田” myData(5) = “宍戸” target_Str = “田” ‘検索文字を指定‘ ‘Filter関数で配列を検索‘ myResult = Filter(myData, target_Str) If UBound(myResult) > -1 Then ‘検索条件を満たすデータが1件以上存在する場合’ MsgBox “検索文字『” & target_Str & “』を含むデータは” & vbCrLf & _ UBound(myResult) + 1 & “件存在します。” Else MsgBox “検索条件に当てはまるデータが存在しません。” End If |
<実行例>
検索条件を変えた場合(一致するデータなし)
<コード>
|
1 |
target_Str = “永” ‘検索文字を指定’ |
<実行例>
まとめ
Filterは配列の検索条件に一致したデータを一気に配列で返してくれるという点が便利ですが、複雑な条件の検索には不向きです。
複数の条件を組み合わせた検索を行いたい場合はIf文やAND、OR等を使用してループ処理でデータを検索するようにしましょう。
































