HOME > 即効テクニック > Excel VBA > 文字列操作関連のテクニック > 検索文字列が前方から何文字目にあるかを取得する(InStr関数、InStrB関数)

即効テクニック

文字列操作関連のテクニック

検索文字列が前方から何文字目にあるかを取得する(InStr関数、InStrB関数)

(Excel 2013/2016)
引数String1で指定した文字列の中からstring2で指定した文字列を前方から検索し、検索文字列が最初に見つかった場所を返します。引数Compareで指定する比較モードは次の一覧のとおりです。


・引数Compareで指定する比較モードを表す定数一覧(VbCompareMethod)

定数         値   説明

vbUseCompareOption  -1   Option Compare ステートメントの設定を使用
                して比較
vbBinaryCompare    0   バイナリ モードの比較
vbTextCompare     1   テキスト モードの比較
vbDatabaseCompare   2   Microsoft Access の場合のみ有効。データベース
               に格納されている設定に基づいて比較


 なお、InStr関数の戻り値は次の表のとおりです。

・InStr関数の戻り値一覧

内容                    値

String1が長さ0の文字列("")のとき      0
String1がNull値のとき            Null 値
String2が長さ0の文字列("")のとき      start
String2がNull値のとき            Null 値
String2が見つからないとき          0
String2がString1内で見つかったとき     見つかった文字列の位置
Startの値がString1の文字数を超えるとき   0


 構文 InStr(Start, String1, String2, Compare)
    InStrB(Start, String1, String2, Compare)


 設定項目        内容
 Start      検索開始位置を指定。省略時は1 [省略可能]
 String1         検索対象の文字列を指定 [省略不可]
 String2         検索文字列を指定 [省略不可]
 Compare         文字列比較のモード指定(一覧参照) [省略可能]


次のサンプルは、メールアドレスに含まれる「@」の位置をInStr関数で検索し、その前後のユーザー名、ドメイン名を取り出します。

●サンプル●
Sub InStrSamp1()
    Dim myStr As String
    Dim n As Integer

    '---変数myStrにメールアドレス設定
    myStr = "tanaka@aaaaa.co.jp"
    '---「@」の位置を取得
    n = InStr(myStr, "@")
    MsgBox "メールアドレス" & myStr & "の" & Chr(13) & Chr(13) & _
          "ユーザー名 : " & Left(myStr, n - 1) & Chr(13) & _
          "ドメイン名 : " & Mid(myStr, n + 1)

End Sub


●ポイント●
比較モードのバイナリモードとテキストモードの違いは下の一覧のとおりです。Excel2000VBAの既定ではバイナリモードが使用されます。

・バイナリモードとテキストモードの違い
内容          例            バイナリモード テキストモード
大文字と小文字   「ABCDE」と「abcde」     異なる文字列  同じ文字列
全角と半角     「ABCDE」と「ABCDE」   異なる文字列  同じ文字列
ひらがなとカタカナ 「あいうえお」と「アイウエオ」異なる文字列  同じ文字列