和風スパゲティのレシピ

日本語でコーディングするExcelVBA

文字列を右側(末尾)から検索する - InStrRev関数

文字列を末尾側から検索し、何文字目にあるかを取得する方法を解説します。

InStrRev関数を使用します。

基本構文

' 基本形
文字列位置 = InStrRev(検索元文字列, 検索文字列)

' 何文字目から検索するかを指定
文字列位置 = InStrRev(検索元文字列, 検索文字列, 検索開始位置)

' 大文字・小文字を区別せずに比較
文字列位置 = InStrRev(検索元文字列, 検索文字列, 検索開始位置, vbTextCompare)

サンプルコード

実行結果サンプル

InStrRev("あいうえおABCあいう", "ABC") ' ← 6
InStrRev("あいうえおABCあいう", "あいう") ' ← 9
InStrRev("あいうえおABCあいう", "あいう", 8) ' ← 1
InStrRev("あいうえおABCあいう", "あいう", 2) ' ← 0

InStrRev("あいうえおABCあいう", "abc") ' ← 0
InStrRev("あいうえおABCあいう", "abc", , vbTextCompare) ' ← 6

使用例:最後に登場する文字列より前/後を切り出し

' 最後に登場する文字列より左側を取得
最後の文字列より左側 = Left(元の文字列, InStrRev(元の文字列, 検索文字列) - 1)

' 最後に登場する文字列より右側を取得
最後の文字列より右側 = Mid(元の文字列, InStrRev(元の文字列, 検索文字列) + Len(検索文字列))

' 1文字の区切り文字より右側をRight関数で取得
最後の区切り文字より右側 = Right(元の文字列, Len(元の文字列) - InStrRev(元の文字列, 区切り文字))

解説

文字列を末尾側から検索するにはInStrRev関数を使用します。

検索は文字列の末尾側から行いますが、
戻り値は文字列の先頭から数えた文字数です。

InStrRev("あいうえおABCあいう", "あいう") ' ← 9
' ↑後ろから判定していくが、右から3文字目ではなく左から9文字目を返す

 
誤解しやすいため注意が必要な仕様ですが、
知ってさえいればLeft・Mid・Right関数と組み合わせやすい便利な仕様です。

Left・Mid・Rightに渡す「左から何文字目」の引数に直接渡してOKですし、
InStr関数で書かれたコードを機械的に書き換えてもちゃんと動きます。


同様に第3引数「検索開始位置」も左から何文字目からスタートするかを指定します。

左から8文字目をスタート地点に、そこから左に向かって検索をしていきます。

InStrRev("あいうえおABCあいう", "あいう", 8) ' ← 1
InStrRev("あいうえおABCあいう", "あいう", 2) ' ← 0

 
わざわざInStrRevにしたときは「最後の登場位置」で使うことが多いため、
あまり使わない引数と思いますが、使う際はご注意ください。


なお、InStr関数の「検索開始位置」は第1引数で、
このためInStr関数は「第1引数が省略可能」な珍しい関数でした。

Instr("あいうえおABCあいう", "あいう") ' ← 1
Instr(2, "あいうえおABCあいう", "あいう") ' ← 9

 
対になるInStrRevはこの特殊な仕様を受け継いでおらず、
純粋に第3引数であることもご留意ください。


先頭側から検索するInStr関数についてはこちらをどうぞ。