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

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

  • VBAで文字列を検索したいけど、使い方がよくわからない…
  • 検索結果が思った通りに出ない…
  • 複数回出てくる場合の処理が難しい!

そんな悩みを解決してくれるのが InStr関数 です。

使い方をマスターすれば、文字列操作がグッと楽になります。

この記事では 基本から応用まで わかりやすく解説します。

InStr関数を使ったテクニック

指定した文字列の中から、探したい文字がどこにあるかを返す関数 です。

見つかった場合は位置(インデックス)を返し、見つからない場合は 0 を返します。

基本構文

基本構文は次のとおり。

VB
InStr([開始位置], 対象文字列, 検索文字列, [比較方法])

基本的な使い方

まずは基本的な使い方の例を示します。

VB
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:検索の開始位置(先頭からなら1)
  • vbTextCompare:大文字小文字を区別しない比較方法

大文字・小文字を無視した検索

vbTextCompare を指定すれば、「VBA」と「vba」も同じものとして検索できます。

VB
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

検索開始位置を指定して2回目以降を探す

同じ文字が複数回出てくる場合、前回見つかった位置+1 を開始位置にして再検索します。

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

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

    foundPos = InStr(1, sentence, target)
    MsgBox "1回目: " & foundPos

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

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

Do Loop と組み合わせれば、すべての出現位置を取得できます。

VB
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

イミディエイトウィンドウに全ての位置を出力します。

まとめ

  • InStr関数 は文字列の位置を返す
  • vbTextCompare で大文字小文字を無視できる
  • 開始位置を指定すれば2回目以降も探せる
  • ループと組み合わせればすべての一致を取得可能

文字列検索で迷ったら、まずは InStr関数 を試してみましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして。旅行をこよなく愛するITエンジニアのNommyです。
これまでUberEatsの配達員、金融業界、ミステリーショッパーなど色々なお仕事を経験してきました。
本ブログでは僕が経験してきたことなどを執筆していきます。

コメント

コメントする

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