「Excel VBAで文字列に含まれる特定の文字の位置を検索したい」とお悩みの方、InStr、InStrRev関数を使うことで簡単に検索できちゃいます。
今回は、InStr、InStrRev関数を使って文字の位置を検索する方法、同じ文字が複数ある場合にどういう結果がでるのかについて解説します。
- InStr関数で文字列の前から検索
- InStrRev関数で文字列の後ろから検索
- 文字列が複数ある場合は、先にヒットした方が優先
- 文字列に含まれる文字の位置を検索したい
- InStr関数、InStrRev関数の使い方を知りたい
文字を前から検索 InStr関数
検索開始位置を指定しない
文字列に含まれる文字を前から検索したい場合は、InStr関数使います。
基本的な使い方は、以下の通りです。
InStr(文字列, 検索する文字)
下図のように、文字列の左から1、2、3、4、5となります。
実際にコードを見ていきましょう。
Sub test()
Dim l As String '文字列格納用の変数を定義
l = "あいうえお"
Debug.Print "あ -> " & InStr(l, "あ")
Debug.Print "い -> " & InStr(l, "い")
Debug.Print "う -> " & InStr(l, "う")
Debug.Print "え -> " & InStr(l, "え")
Debug.Print "お -> " & InStr(l, "お")
End Sub
上図の結果から分かるように、文字列の先頭を基準に、1、2、3、4、5と出力されているのが分かります。
「文字列」に「検索する文字」が含まれない場合は、“0”が出力されます。
文字が複数ある場合
文字列に検索文字が複数ある場合、先にヒットした方が優先されます。
つまり、InStr関数であれば、左から検索し先にヒットした位置が戻り値として返ってきます。
実際にコードで確かめていきましょう。
Sub test()
Dim l As String '文字列格納用の変数を定義
l = "あいうあい"
Debug.Print "あ -> " & InStr(l, "あ")
Debug.Print "い -> " & InStr(l, "い")
Debug.Print "う -> " & InStr(l, "う")
End Sub
文字列には、”あ”、”い”が複数ありますが、先にヒットした”1″、”2″が戻り値として返ってきています。
下図のように文字列の左から文字を検索したため、”1″、”2″番目の文字がヒットしています。
検索開始位置を指定する
InStr関数で文字を検索する際、検索開始位置を指定することも可能です。
基本的な使い方は、以下の通りです。
InStr(検索開始位置, 文字列, 検索する文字)
実際にコードを見ていきましょう。
Sub test()
Dim l As String '文字列格納用の変数を定義
l = "あいうあい"
Debug.Print "あ -> " & InStr(2, l, "あ")
Debug.Print "い -> " & InStr(2, l, "い")
Debug.Print "う -> " & InStr(2, l, "う")
End Sub
文字の検索開始位置を”2″にしたことで、1番目の”あ”は検索対象外になります。
そのため、”あ”の検索位置は”4″が戻り値として返っていきます。
文字を後ろから検索 InStrRev関数
検索開始位置を指定しない
文字列に含まれる文字を後ろから検索したい場合は、InStrRev関数使います。
基本的な使い方は、以下の通りです。
InStrRev(文字列, 検索する文字)
Sub test()
Dim l As String '文字列格納用の変数を定義
l = "あいうあい"
Debug.Print "あ -> " & InStrRev(l, "あ")
Debug.Print "い -> " & InStrRev(l, "い")
Debug.Print "う -> " & InStrRev(l, "う")
End Sub
InStrRev関数では、文字列の後ろから文字を検索するため、”あ”を検索した場合、後ろから検索し先にヒットした”4″が戻り値として返されます。
検索開始位置を指定する
InStrRev関数で文字を検索する際、検索開始位置を指定することも可能です。
基本的な使い方は、以下の通りです。
InStrRev(文字列, 検索する文字, 検索開始位置)
Sub test(
Dim l As String '文字列格納用の変数を定義
l = "あいうあい"
Debug.Print "あ -> " & InStrRev(l, "あ", 3)
Debug.Print "い -> " & InStrRev(l, "い", 3)
Debug.Print "う -> " & InStrRev(l, "う", 3)
End Sub
検索開始位置を”3″にしたことで、検索対象である文字列は”あいう”になり、ヒットした位置が戻り値として返ってきます。
まとめ
ここまで、文字列に含まれる文字を前から検索する方法、後ろから検索する方法について解説しました。
- 文字列に含まれる文字を前から検索 → InStr関数
- 文字列に含まれる文字を後ろから検索 → InStrRev関数
- 検索する文字が複数ある場合は、先にヒットした方が優先