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