対象文字列を後ろから検索し、指定の文字列があるかどうかを調べる関数です。
指定の文字列があった場合は、最初に見つかった位置を返します。
関数仕様
構文 |
InStrRev(string1, string2[, start[, compare]]) |
引数 |
引数 |
省略 |
説明 |
string1 |
不可 |
検索対象(検索元)となる文字列式を指定します。 |
string2 |
不可 |
検索する文字列式を指定します。 |
start |
可 |
検索の開始位置を表す数式を指定します。
省略した場合、規定値の -1 が採用され、文字列の終わりから検索します。
ただし、引数 compare を指定した場合は、必ずこの引数も指定する必要があります。
|
compare |
可 |
文字列比較のモードを指定する番号または以下定数を指定します。
定数 |
値 |
説明 |
vbUseCompareOption |
-1 |
Option Compare ステートメントの設定を使用して比較を行います。
|
vbBinaryCompare |
0 |
バイナリモードの比較を行います。(規定値)
(大文字・小文字、半角・全角の区別をします)
|
vbTextCompare |
1 |
テキストモードの比較を行います。
(大文字・小文字、半角・全角の区別をしません)
|
vbDatabaseCompare |
2 |
データベースに格納されている設定に基づいて比較を行います。
(Microsoft Access でのみ有効)
|
|
|
戻り値 |
バリアント型(内部処理形式 Long の Variant) |
この関数は、引数 string1 で指定した検索元となる文字列内に、引数 string2 で指定した文字列が含まれているかどうかを検索元文字列の後方から検索し、含まれていた場合に、最初に見つかった位置をバリアント型(内部処理形式 Long の Variant)で返します。 検索開始位置は省略可能で、省略した場合は文字列の最後から検索します。 ただし、検索方法(引数 compare)を指定する場合は、開始位置も必ず指定する必要があります。 文字の位置番号は先頭が 1 番となります。 例えば、10 文字の文字列に対して開始位置に 5 を指定した場合は、文字列の検索は 5 番目から順に 4, 3, 2, 1 と行われます。 検索元文字列内に目的の文字列が含まれていなかった場合、この関数は 0 を返します。
なお、検索方法を省略した場合、文字列の検索は規定値のバイナリモードで行われ、大文字・小文字や半角・全角が区別されますが、大文字・小文字や半角・全角を区別しない検索を行いたい場合は、検索方法にテキストモード(vbTextCompare)を指定します。
動作検証
条件 |
例 |
動作結果 |
開始位置と検索方法を省略した場合
|
InstrRev("abcde", "cd")
|
3 |
開始位置と検索方法を指定した場合
|
InstrRev("abcde", "cd", 5, vbBinaryCompare)
|
3 |
開始位置が指定文字列の最初の1文字を含んでいた場合
|
InstrRev("abcde", "cd", 3)
|
0(※1) |
指定の文字列が含まれていなかった場合
|
InstrRev("abcde", "fg")
|
0(※2) |
大文字・小文字の違いのある文字列を検索した場合
(バイナリモード)
|
InstrRev("abcde", "CD", vbBinaryCompare)
|
0(※3)
|
大文字・小文字の違いのある文字列を検索した場合
(テキストモード)
|
InstrRev("abcde", "CD", vbTextCompare)
|
3(※3)
|
半角・全角の違いのある文字列を検索した場合
(バイナリモード)
|
InstrRev("abcde", "cd", vbBinaryCompare)
|
0(※3)
|
半角・全角の違いのある文字列を検索した場合
(テキストモード)
|
InstrRev("abcde", "cd", vbTextCompare)
|
3(※3)
|
ひらがな・カタカナの違いのある文字列を検索した場合
(バイナリモード)
|
InstrRev("あいうえお", "ウエ", vbBinaryCompare)
|
0(※3)
|
ひらがな・カタカナの違いのある文字列を検索した場合
(テキストモード)
|
InstrRev("あいうえお", "ウエ", vbTextCompare)
|
3(※3)
|
開始位置に負数を指定した場合
|
InstrRev("abcde", "cd", -2, vbTextCompare)
|
実行時エラー(※4)
|
検索方法を指定し開始位置を指定しなかった場合
|
InstrRev("abcde", "cd", vbTextCompare)
|
実行時エラー(※5)
|
検索文字にNull値を指定した場合
|
InstrRev("abcde", Null)
|
実行時エラー |
※1 文字列"abcde"の開始位置を 3 とした場合、検索対象となる文字列は "abc" となる為、目的の"cd"文字列は含まれないと判断されます。
※2 指定の文字列が検索できなかった場合(含まれていなかった場合)、この関数は 0 を返します。
※3 バイナリモードは大文字・小文字、半角・全角、ひらがな・カタカナの区別をし、テキストモードは区別をしません。
※4 開始位置は 1 以上の整数で指定する必要があります。(例外として -1 を指定した場合は文字列の最後からの指定となります(規定値))
※5 検索方法を指定した場合は必ず開始位置も指定する必要があります。
類似関数
この関数に類似する機能をもつ関数は、以下のものがあります。
関数 |
説明 |
InStr
|
文字列内の指定文字列を検索し、最初に見つかった位置を返す。
|
※ InStrRev() 関数が文字列の後方から検索するのに対して InStr() 関数は文字列の前方から検索を行います。ただし、InStrRev() 関数と InStr() 関数では構文が違い、引数の指定順が異なりますので、注意が必要です。
サンプルコード
Sub Sample()
Dim filename As String
filename = "testfile.xxx"
Debug.Print Mid(filename, InStrRev(filename, ".") + 1) ' 拡張子を返します
End Sub