- 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関数 を試してみましょう!
コメント