InStr

文字列の左または右から、指定された出現箇所を検索します。

FoundPos := InStr(Haystack, Needle , CaseSense, StartingPos, Occurrence)

パラメータ

Haystack

型:文字列

内容を検索する文字列。

Needle

型:文字列

検索する文字列です。

CaseSense

型:文字列 or 整数(ブーリアン)

省略したときは、Offが初期値になります。そうでないときは、次のいずれかの値を指定します:

On または 1 (true):検索では大文字と小文字が区別されます。

Off または 0 (false):検索では大文字と小文字が区別されないため、A-Z の文字は小文字の文字と同一と見なされます。

Locale:検索では、現在のユーザーのロケールの規則に従って大文字と小文字は区別されません。例えば、英語や西欧のロケールでは、A~Zの小文字だけでなく、ÄやÜなどの非ASCII文字も小文字と同じように扱われることがほとんどです。Localeは、比較する文字列の性質によって、Offの1~8倍遅くなります。

StartingPos

型:整数

省略したときは、文字列全体が検索対象になります。そうでないときは、検索を開始する位置を指定します。1が最初の文字、2が2番目の文字のように指定します。負の値はHaystackの最後から数えるので、-1が最後の文字、-2が2番目の文字のように指定します。。

Occurrenceを省略したときは、StartingPosが負であれば、右から左へ検索します。ただし、Occurrenceを指定したときは、StartingPosは検索の方向には影響しません。

右から左への検索では、StartingPosNeedleの最初の出現候補の最後の文字の位置を指定します。例えば、InStr("abc", "bc",, 2, +1)はマッチしますが、InStr("abc", "bc",, 2, -1)はそうではありません。

StartingPosの絶対値がHaystackの長さより大きいときは、0 が返されます。

Occurrence

型:整数

省略したときは、Haystackでの最初のマッチが初期値となります。StartingPos が負の場合は右から左へ、そうでないときはは左から右へ検索されます。

Occurrenceが正の場合、検索は常に左から右へ行われる。Occurrenceに2を指定すると、2番目にマッチした位置を、3を指定すると3番目にマッチした位置を返します。

Occurrenceが負の場合、検索は常に右から左へ行われます。例えば、-2は右から2番目に出現するものを検索します。

戻り値

型:整数

この関数は、文字列Haystackの中で文字列Needleが出現する位置を返します。これは、0が「偽」と同義であり、直感的に「見つからない」ことを示すからである。

StartingPosOccurrenceの値に関係なく、戻り値は常にHaystackの最初の文字に対する相対値です。例えば、「123abc789」の「abc」の位置は、常に4です。

通常、空文字列("")は、どの位置にも出現します。しかし、空白のNeedleは通常間違って渡されるだけなので、エラーとして扱われ、例外がスローされます。

エラー処理

以下のいずれかに該当する場合、ValueErrorが発生します:

備考

RegExMatchは、文字列の中にあるパターン(正規表現)を検索することができるので、InStrよりはるかに柔軟性があります。しかし、単純な部分文字列を検索する場合は、一般にInStrの方がRegExMatchより高速です。

InStrは最初のバイナリゼロ(ヌルターミネーター)までしか検索しませんが、RegExMatchはバイナリゼロが含まれていても、文字列の全長を検索しています。

RegExMatchIs関数

文字列 "123abc789"中の部分文字列 "abc"の1基準の位置を報告する。

MsgBox InStr("123abc789", "abc") ; 4を返します。

HaystackNeedleで探します。

Haystack := "The Quick Brown Fox Jumps Over the Lazy Dog"
Needle := "Fox"
If InStr(Haystack, Needle)
    MsgBox "文字列が見つかりました。"
Else
    MsgBox "文字列が見つかりません。"

大文字小文字を区別したり、しなかったりしたときの例です。

Haystack := "The Quick Brown Fox Jumps Over the Lazy Dog"
Needle := "the"
MsgBox InStr(Haystack, Needle, false, 1, 2) ; 大文字小文字を区別しないで検索し、先頭から検索して2番目に出現した場所を返します。
MsgBox InStr(Haystack, Needle, true) ; 大文字小文字を区別して検索し、先頭から検索して最初に出現した場所を返します。上の結果と同じです。