更新日:、 作成日:

VBA InStrRev 関数:文字列の位置を後ろから検索する

はじめに

Excel VBA マクロの InStrRev 関数から文字列の位置を後ろから検索する方法を紹介します。

InStrRev 関数は、文字列を後ろから検索して最初に見つかった前からの位置を返します。

あいう から を検索したら 1 を返します。

検索ワードが見つからないときは 0 を返します。

文字列を後ろから検索して見つかった位置を取得したいときに使用します。

前から検索するには「InStr 関数」を使用します。
文字列を検索するには「文字列を検索する」をご覧ください。

InStrRev 関数の引数と戻り値

InStrRev(検索元, 検索ワード)
検索元の文字列から検索ワードを後ろから検索して見つかった位置を取得します。

InStrRev(検索元, 検索ワード, 開始位置, 比較モード)
指定した開始位置から検索できます。比較モードで大文字と小文字を区別するか指定できます。

引数「検索元」検索元の文字列を指定します。
引数「検索ワード」検索するキーワードを指定します。
引数「開始位置」省略できます。前から何文字目から検索するかを指定します。
引数「比較モード」省略できます。大文字と小文字を区別して検索するかを指定します。
戻り値の型数値型 (Long)

引数「比較モード」

単位 説明
vbBinaryCompare (既定)「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別する。
vbTextCompare区別しない。

解説

後ろから前方に向かって (右から左に) 検索しますが、結果や引数「開始位置」は前からの位置です。

引数「検索ワード」が見つからないときは 0 を返します。前から 1 文字目で見つかったときは 1 を返します。

文字列が含まれているか判定したいときは、0 なら存在しない、1 以上なら存在します。

引数「検索ワード」が空文字 "" なら、引数「開始位置」を返します。引数「開始位置」を省略するか -1 のときは、一番後ろの位置なので引数「検索元」の文字数を返します。

引数「開始位置」を省略するか -1 なら、一番後ろの文字から検索します。

引数「開始位置」は前からの文字数です。 3 なら前から 3 文字目の位置から前方に検索します。

引数「開始位置」が引数「検索元」の文字数を超えるときは 0 を返します。

引数「検索元」の前から検索するには「InStr 関数」を使用します。

セルの位置を検索するには「セルを検索する」をご覧ください。

使用例

InStrRev 関数の使用例を紹介します。

文字列の位置を後ろから検索する

文字列の位置を後ろから検索します。

Dim l As Long
l = InStrRev("ABCABC", "Z")
Debug.Print(l) ' 0

l = InStrRev("ABCABC", "A")
Debug.Print(l) ' 4

l = InStrRev("ABCABC", "C")
Debug.Print(l) ' 6

l = InStrRev("ABCABC", "A", 2) ' 前から 2 文字目から検索
Debug.Print(l) ' 1

l = InStrRev("ABCABC", "CA") 
Debug.Print(l) ' 3

l = InStrRev("ABCABC", "")  ' 空文字なら開始位置
Debug.Print(l) ' 6

l = InStrRev("ABCabc", "A") ' 省略すると大文字小文字を区別する
Debug.Print(l) ' 1

l = InStrRev("ABCabc", "A", -1, vbBinaryCompare) ' 区別する
Debug.Print(l) ' 1

l = InStrRev("ABCabc", "A", -1, vbTextCompare)   ' 区別しない
Debug.Print(l) ' 4

l = InStrRev("アイウアイウ", "ア", -1, vbBinaryCompare) ' 区別する
Debug.Print(l) ' 1

l = InStrRev("アイウアイウ", "ア", -1, vbTextCompare)   ' 区別しない
Debug.Print(l) ' 4

l = InStrRev("アイウあいう", "ア", -1, vbBinaryCompare) ' 区別する
Debug.Print(l) ' 1

l = InStrRev("アイウあいう", "ア", -1, vbTextCompare)   ' 区別しない
Debug.Print(l) ' 4