VBAで文字列から文字列を検索する(InStr、InStrRev)

InStr、InStrRev

InStr関数とInStrRev関数は、ある文字列の中に指定した文字列が存在する位置を内部処理形式LongのVariantの値で返します。

存在する場合は左端の先頭を1として何文字目にあるかを返します。

存在しない場合は0を返します。

InStr関数とInStrRev関数の違い

InStr関数とInStrRev関数の違いは、左から検索するか、右から検索するかの違いです。

例えば、” abc abc “という半角スペースを含む9文字の文字列がある場合、”abc”をInStr関数で検索した場合は左から2番目にあるため2を返し、”abc”をInStrRev関数は右から検索して先に見つかる”abc”の位置である6番目の6を返します。

検索の方向が違うだけで、見つかった位置を「左から何番目か」と判定するのはInStr関数もInStrRev関数も同じです。

構文

InStr関数

Start 検索を開始する文字位置を指定します。

左端である先頭は1になります。

省略時は先頭から検索されます。

引数Compareを指定した場合は省略できません。

String1 検索される側の文字列を指定します。
String2 引数String1から検索したい文字列を指定します。

ワイルドカードは指定できません。

Compare 検索する際の比較モードをVbCompareMethod列挙型で指定します。

VbCompareMethod列挙型

定数 内容
vbBinaryCompare 0 バイナリモード(大文字と小文字、全角と半角、ひらがなとカタカナを区別する)
vbTextCompare 1 テキストモード(大文字と小文字、全角と半角、ひらがなとカタカナを区別しない)

省略時はvbBinaryCompare(バイナリモード)になります。

設定時は引数Startは省略できません。

InStrRev関数

StringCheck 検索される側の文字列を指定します。
StringMatch 引数String1から検索したい文字列を指定します。

ワイルドカードは指定できません。

Start 検索を開始する文字位置を指定します。

左端である先頭は1になります。

省略時は末尾(右端)から検索されます。

引数Compareを指定した場合は省略できません。

Compare 検索する際の比較モードをVbCompareMethod列挙型で指定します。

省略時はvbBinaryCompare(バイナリモード)になります。

設定時は引数Startは省略できません。

InStr関数とInStrRev関数は引数の並びが異なります。

個人的には同じにしておけばいいのに、と思いますが仕方ありません。

戻り値

InStr関数とInStrRev関数の戻り値は引数の内容や検索結果によって以下のようになります。

検索結果 戻り値
存在する場合 見つかった文字列の左端の位置を返す
存在しない場合 0を返す
String1、StringCheckが空文字列の場合 0を返す
String2、StringMatchが空文字列の場合 引数Startの値
StartがString1、StringCheckの文字数より大きい場合 0を返す

サンプルコード

文字列” abc abc “から”abc”をInStr関数とInStrRev関数で検索した場合のサンプルです。

InStr関数の場合は左側の” abc abc “が検索され、先頭の”a”が2番目であるため2を返します。

InStrRev関数の場合は右側の” abc abc “が検索され、先頭の”a”が6番目にあるため6を返します。

関連記事

サブコンテンツ

このページの先頭へ