\ お問い合わせはこちら! /

【VBA InStr関数ガイド】文字列検索をもっとスマートに!

  • 「VBAで文字列を検索する方法がよくわからない…」
  • 「検索結果が思った通りに出ない…」
  • 「複数回登場する場合の対応が難しい!」

そんなあなたにオススメなのが、VBAのInStr関数

使い方をマスターすれば、文字列処理がグッと楽になります!この記事では、InStrの基本から、部分一致や複数検索まで、丁寧に解説していきます。

InStr関数の基本構文と使い方

InStr関数は、ある文字列内に指定した語句が現れる位置を返す関数です。見つかった場所の位置(インデックス)を返し、見つからなければ0になります。

文字列の中に含まれている位置を取得する

Sub SampleInStr()
    Dim baseText As String
    Dim keyword As String
    Dim result As Long

    baseText = "今日の天気は晴れです"
    keyword = "天気"

    result = InStr(1, baseText, keyword, vbTextCompare)

    If result > 0 Then
        MsgBox "キーワードは" & result & "文字目にあります"
    Else
        MsgBox "キーワードは見つかりませんでした"
    End If
End Sub

このコードでは、「今日の天気は晴れです」という文字列に対して、「天気」が含まれているかを検索しています。

検索開始位置を1、比較方法をvbTextCompare(大文字小文字を無視)で指定しています。

大文字小文字を区別しない検索

InStr関数では、比較方法を指定することで大文字小文字の区別をするかどうかを選べます。初心者がつまずきがちなポイントですが、vbTextCompare を使えば回避できます!

vbTextCompare を指定して検索精度を上げる

Sub InStrIgnoreCase()
    Dim text As String
    Dim word As String
    Dim pos As Long

    text = "Excel VBA"
    word = "vba"

    pos = InStr(1, text, word, vbTextCompare)

    If pos > 0 Then
        MsgBox "大文字小文字を無視してヒット!位置: " & pos
    Else
        MsgBox "見つかりませんでした。"
    End If
End Sub

このように、「VBA」と「vba」も同じものとして扱って検索できます。厳密一致ではない検索をしたいときに便利です。

検索開始位置を指定する

InStr関数の第一引数には、検索をスタートする文字位置を指定できます。これを使えば、同じ文字列内に複数の候補がある場合でも、柔軟な検索が可能です。

複数回登場する文字列のうち、2回目以降を見つけたいときに

Sub InStrStartFrom()
    Dim sentence As String
    Dim target As String
    Dim startPos As Long
    Dim foundPos As Long

    sentence = "リンゴとリンゴジュースとリンゴケーキ"
    target = "リンゴ"
    startPos = 1

    foundPos = InStr(startPos, sentence, target)

    If foundPos > 0 Then
        MsgBox "1回目: " & foundPos
        foundPos = InStr(foundPos + 1, sentence, target)
        If foundPos > 0 Then
            MsgBox "2回目: " & foundPos
        End If
    End If
End Sub

このように、1回目に見つかった位置の次から再検索することで、2回目以降の出現位置も見つけられます。

すべての一致を取得する方法(ループ処理)

InStrは1回の検索しかできませんが、ループと組み合わせればすべての一致位置を取得することも可能です。

Doループを使ってすべての出現箇所を見つける

Sub FindAllOccurrences()
    Dim text As String
    Dim word As String
    Dim currentPos As Long
    Dim foundPos As Long

    text = "abcabcabc"
    word = "abc"
    currentPos = 1

    Do
        foundPos = InStr(currentPos, text, word)
        If foundPos = 0 Then Exit Do

        Debug.Print "見つかった位置: " & foundPos
        currentPos = foundPos + 1
    Loop
End Sub

このコードでは、対象文字列の中に「abc」が何度出現するかをすべて検出し、位置をイミディエイトウィンドウに出力しています。

まとめ:InStrで文字列操作を味方にしよう!

InStr関数を使えば、VBAでの文字列検索がぐっと簡単&柔軟になります。条件付き処理やログ分析など、幅広い用途で活用できる基本テクニックです。

今回のポイント

  • ✅ InStr関数は文字列の位置を返す!
  • vbTextCompareで大文字小文字を無視できる!
  • ✅ ループと組み合わせれば複数一致も取得可能!

検索処理で詰まっているなら、まずはInStrから試してみましょう!💡

この記事が気に入ったら
フォローしてね!

シェア・記事の保存はこちら!

この記事を書いた人

CFXLOGのアバター CFXLOG プログラマ

メイン言語はPython。本ブログでは、実務や普段の学習で学んだことをアウトプットしています。
基本情報技術者試験合格者。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)