【ExcelVBA】配列から文字列を検索する方法とは(Application.Match関数を使用)

この記事では、配列から文字列を検索する方法についてご説明します。

【動画】配列から文字列を検索する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


Application.Match関数を使って配列から文字列を検索しています。

マクロ作成の流れ

STEP.1
Application.Match関数の引数に配列と検索する文字列を指定して実行する
Application.Matchの引数に配列と検索する文字列を指定して実行します。
STEP.2
Application.Match関数の戻り値を判定する
Application.Match関数の戻り値を判定します。
値が返ってきたら、その値は配列の何番目の要素位置に当たるかが特定でき、エラーを返したら配列には検索した文字列が存在していないということになります。

Excelファイルの例

今回は次のExcelファイルを作成しました。

名前がsearchStrのセルに検索する文字列を入力します。

コードの例

Option Explicit

Sub test()

    Dim dataVal()   As Variant      '配列
    Dim searchStr   As Variant      '検索文字列
    Dim index       As Variant      '配列の要素用変数

    '配列に文字列を格納する
    dataVal = Array("東京都", _
                    "群馬県", _
                    "栃木県", _
                    "千葉県", _
                    "埼玉県", _
                    "茨城県", _
                    "神奈川県")

    '検索したい文字列を取得する
    searchStr = ActiveSheet.Range("searchStr").Value
    
    '配列から文字列を検索し、格納されている要素を取得する
    '→検索した文字列が配列に存在しなかった場合はエラーを返す
    index = Application.Match(searchStr, dataVal, 0)
    
    If Not IsError(index) Then
    
        '変数indexに格納された値がエラーでない場合
        
        '文字列が配列にあった場合は、検索した値が見つかった旨のメッセージを表示する
        MsgBox "検索値が見つかりました。" & Chr(13) & "要素番号:" & index - 1
        
    Else
    
        '文字列が配列になかった場合は、検索した値が見つからなかった旨のメッセージを表示する
        msgbox "検索値が見つかりませんでした。"
        
    End If

End Sub

注目すべきコード①

最初に見て頂きたいのは51行目から57行目です。

    '配列に文字列を格納する
    dataVal = Array("東京都", _
                    "群馬県", _
                    "栃木県", _
                    "千葉県", _
                    "埼玉県", _
                    "茨城県", _
                    "神奈川県")

    '検索したい文字列を取得する
    searchStr = ActiveSheet.Range("searchStr").Value

コードの説明

以上のコードは、サンプルで用意した配列に格納するデータを配列に格納しているコードと、検索したい文字列を取得するコードです。

この配列には関東の県をお試しで入れていますが、この中から検索したい文字列(県名)を探します。

今回は配列の中からセルsearchStrの文字列を探します。

注目すべきコード②

次に見て頂きたいのは23行目です。

    '配列から文字列を検索し、格納されている要素を取得する
    '→検索した文字列が配列に存在しなかった場合はエラーを返す
    index = Application.Match(searchStr, dataVal, 0)

コードの説明

以上のコードは、Application.Match関数を使って配列から文字列を検索している処理のコードです。

Application.Match関数に指定する引数は次の通りです。

  1. 第1引数:検索する文字列
  2. 第2引数:検索対象の配列
  3. 第3引数:検索方法

第1引数:検索する文字列

第1引数に検索する文字列を指定します。

第2引数:検索対象の配列

第2引数に検索対象の配列を指定します。

第3引数:検索する文字列

第3引数に検索方法を指定します。

検索方法とは、どのように検索するのか、その検索方法を第3引数に指定します

検索方法の指定には3つのパターンがありますが、今回は完全に一致する値を検索したいので0を指定しています。

注目すべきコード③

次に見て頂きたいのは25行目から37行目です。

    If Not IsError(index) Then
    
        '変数indexに格納された値がエラーでない場合
        
        '文字列が配列にあった場合は、検索した値が見つかった旨のメッセージを表示する
        MsgBox "検索値が見つかりました。" & Chr(13) & "要素番号:" & index - 1
        
    Else
    
        '文字列が配列になかった場合は、検索した値が見つからなかった旨のメッセージを表示する
        msgbox "検索値が見つかりませんでした。"
        
    End If

コードの説明

以上のコードは、配列を検索した結果見つかったかどうかを判定している処理のコードです。

見つかったら検索した値が見つかった旨のメッセージを表示し、見つからなかったら検索した値が見つからなかった旨のメッセージを表示しています。

コードの詳細

25行目のコードでは、Application.Match関数の戻り値を判定しています。

    If Not IsError(index) Then

検索した値が見つかった場合は、その検索した値が存在する要素位置を返し、見つからなかったらエラー(の値)を返します。

以上のコードではエラー(値が見つからない)かエラーではない(値が存在する)かを判定しています。

エラーではない(値が存在する)場合は、30行目で検索した値が見つかった旨のメッセージを表示しています。

        '文字列が配列にあった場合は、検索した値が見つかった旨のメッセージを表示する
        MsgBox "検索値が見つかりました。" & Chr(13) & "要素番号:" & index - 1

エラー(値が見つからない)場合は、35行目で検索した値が見つからなかった旨のメッセージを表示しています。

        '文字列が配列になかった場合は、検索した値が見つからなかった旨のメッセージを表示する
        msgbox "検索値が見つかりませんでした。"

動作確認

配列に検索した文字列が存在する場合

検索する文字列が存在する場合は、検索した値が見つかった旨のメッセージを表示しています。

配列に検索した文字列が存在しない場合

検索する文字列が存在しない場合は、検索した値が見つからなかった旨のメッセージを表示しています。

最後に

本記事では、配列から文字列を検索する方法についてご説明しました。

配列から文字列が存在しているか確認したいときは本記事を参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら