更新日:、 作成日:
VBA InStr 関数:文字列の位置を検索する
はじめに
Excel VBA マクロの InStr 関数から文字列の位置を検索する方法を紹介します。
InStr 関数は、文字列を検索して最初に見つかった位置を返します。
あいう から あ を検索したら 1 を返します。
検索ワードが見つからないときは 0 を返します。
大文字と小文字を区別するか選択できます。
文字列の中から検索ワードの位置を取得したいときに使用します。
InStr 関数の引数と戻り値
InStr(検索元, 検索ワード)
検索元の文字列から検索ワードが最初に見つかった位置を取得します。
InStr(開始位置, 検索元, 検索ワード, 比較モード)
指定した開始位置から検索できます。比較モードで大文字と小文字を区別するか指定できます。
引数「開始位置」 | 省略できます。何文字目から検索するかを指定します。 |
引数「検索元」 | 検索元の文字列を指定します。 |
引数「検索ワード」 | 検索するキーワードを指定します。 |
引数「比較モード」 | 省略できます。大文字と小文字を区別して検索するかを指定します。 |
戻り値の型 | 数値型 (Long) |
引数「比較モード」
単位 | 説明 |
vbBinaryCompare (既定) | 「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別する。 |
vbTextCompare | 区別しない。 |
解説
引数「検索ワード」が見つからないときは 0 を返します。1 文字目で見つかったときは 1 を返します。
文字列が含まれているか判定したいときは、0 なら存在しない、1 以上なら存在します。
引数「検索ワード」が空文字 "" なら、引数「開始位置」を返します。引数「開始位置」を省略したときは、1 を返します。
引数「検索ワード」が一致するすべての位置を取得するには 0 を返すまでループする必要があります。
引数「開始位置」を省略すると 1 文字目から検索します。
引数「開始位置」が 1 なら前から 1 文字目、2 なら 2 文字目から検索します。
引数「開始位置」が引数「検索元」の文字数を超えるときは 0 を返します。
引数「比較モード」を省略すると、大文字と小文字などを区別します。
引数「比較モード」を指定するときは、必ず引数「開始位置」も指定します。
引数「検索元」の後ろから検索するには「InStrRev 関数」を使用します。
スポンサーリンク
使用例
InStr 関数の使用例を紹介します。
文字列の位置を検索する
文字列の位置を検索します。
Dim l As Long
l = InStr("ABCABC", "Z")
Debug.Print(l) ' 0
l = InStr("ABCABC", "A")
Debug.Print(l) ' 1
l = InStr("ABCABC", "C")
Debug.Print(l) ' 3
l = InStr(2, "ABCABC", "A") ' 2 文字目から検索
Debug.Print(l) ' 4
l = InStr("ABCABC", "CA")
Debug.Print(l) ' 3
l = InStr("ABCABC", "") ' 空文字なら開始位置
Debug.Print(l) ' 1
l = InStr("abcABC", "A") ' 省略すると大文字小文字を区別する
Debug.Print(l) ' 4
l = InStr(1, "abcABC", "A", vbBinaryCompare) ' 区別する
Debug.Print(l) ' 4
l = InStr(1, "abcABC", "A", vbTextCompare) ' 区別しない
Debug.Print(l) ' 1
l = InStr(1, "アイウアイウ", "ア", vbBinaryCompare) ' 区別する
Debug.Print(l) ' 4
l = InStr(1, "アイウアイウ", "ア", vbTextCompare) ' 区別しない
Debug.Print(l) ' 1
l = InStr(1, "あいうアイウ", "ア", vbBinaryCompare) ' 区別する
Debug.Print(l) ' 4
l = InStr(1, "あいうアイウ", "ア", vbTextCompare) ' 区別しない
Debug.Print(l) ' 1
すべての位置を検索する
検索ワードが複数見つかるときは、0 を返すまでループしてすべての位置を取得できます。
Dim i As Integer ' 開始位置
i = 0
Do
i = InStr(i + 1, "ABCABCABC", "A") ' A をすべて検索する
Debug.Print(i) ' 1 4 7 0
Loop Until i = 0
引数「検索ワード」が空文字なら 0 を返さないので、そのときはループできません。