- 「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から試してみましょう!💡
コメント