VBA 文字列を検索し位置を取得する(InStr)

VBAの文字列を検索し位置を取得するサンプルです。Excel、Accessとも同じです。

目次

InStr+引数2つ 前から検索する
InStr+引数3つ 前から検索する+開始位置を指定
InstrRev+引数2つ 後から検索する
InstrRev+引数3つ 後から検索する+開始位置を指定

前から検索する

InStr(文字列, 検索する文字列)
  • 文字列string1の先頭から検索して引数strings2の文字列が出現した位置を返します。
  • 先頭の1文字目の位置は1です。
  • 存在しないときは、0を返します。

InStr関数のサンプルです。

Sub test1()
    Dim str1 As String
    str1 = "abcabc"
    Debug.Print InStr(str1, "a") '1が表示される
    Debug.Print InStr(str1, "b") '2が表示される
    Debug.Print InStr(str1, "c") '3が表示される
    Debug.Print InStr(str1, "abc") '1が表示される
    Debug.Print InStr(str1, "z") '0が表示される

    Dim str2 As String
    str2 = "あいうあいう"
    Debug.Print InStr(str2, "あ") '1が表示される
    Debug.Print InStr(str2, "い") '2が表示される
    Debug.Print InStr(str2, "う") '3が表示される
End Sub

3行目は、変数に文字列を代入しています。
4~7行目は、前から検索し引数の文字列が最初に見つかった位置を返しています。
8行目は、該当の文字がないので0が返ります。
11行目は、変数に日本語の文字列を代入しています。

前から検索する+開始位置を指定

InStr(検索開始位置, 文字列, 検索する文字列)
  • 引数のstartは検索開始位置です。

InStr関数で、検索開始位置を指定するサンプルです。

Sub test1()
    Dim str1 As String
    str1 = "あいうあいう"
    
    Debug.Print InStr(1, str1, "あ") '1が表示される
    Debug.Print InStr(2, str1, "あ") '4が表示される
    Debug.Print InStr(3, str1, "あ") '4が表示される
    Debug.Print InStr(4, str1, "あ") '4が表示される
    Debug.Print InStr(5, str1, "あ") '0が表示される
    Debug.Print InStr(6, str1, "あ") '0が表示される
    
End Sub

5行目の引数は1で対象の文字列は(あいうあいう)です。位置の1が返ります。
6行目の引数は2で対象の文字列は(いうあいう)です。位置の4が返ります。
7行目の引数は3で対象の文字列は(うあいう)です。位置の4が返ります。
8行目の引数は4で対象の文字列は(あいう)です。位置の4が返ります。
9行目の引数は5で対象の文字列は(いう)です。文字(あ)はないので0です。
10行目の引数は6で対象の文字列は(う)です。文字(あ)はないので0です。

以下はMicrosoft公式のInStr関数のリンクです。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/instr-function

後から検索する

InstrRev(文字列, 検索する文字列)
  • 文字列の後から検索して検索する文字列が出現した位置を返します。
  • 先頭の1文字目の位置は1です。
  • 存在しないときは、0を返します。

InStrRev関数のサンプルです。

Sub test1()
    Dim str1 As String
    str1 = "abcabc"
    Debug.Print InStrRev(str1, "a") '4が表示される
    Debug.Print InStrRev(str1, "b") '5が表示される
    Debug.Print InStrRev(str1, "c") '6が表示される
    Debug.Print InStrRev(str1, "abc") '4が表示される
    Debug.Print InStrRev(str1, "z") '0が表示される

    Dim str2 As String
    str2 = "あいうあいう"
    Debug.Print InStrRev(str2, "あ") '4が表示される
    Debug.Print InStrRev(str2, "い") '5が表示される
    Debug.Print InStrRev(str2, "う") '6が表示される
End Sub

3行目は、変数に文字列を代入しています。
4~7行目は、後ろから検索し引数の文字列が最初に見つかった位置を返しています。
8行目は、該当の文字がないので0が返ります。
12行目は、変数に日本語の文字列を代入しています。

後から検索する+開始位置を指定

InstrRev(文字列, 検索する文字列,  検索開始位置)
  • 引数のstartは検索開始位置です。

InStrRev関数で、検索開始位置を指定するサンプルです。

Sub test1()
    Dim str1 As String
    str1 = "あいうあいう"
    
    Debug.Print InStrRev(str1, "あ", 6) '4が表示される
    Debug.Print InStrRev(str1, "あ", 5) '4が表示される
    Debug.Print InStrRev(str1, "あ", 4) '4が表示される
    Debug.Print InStrRev(str1, "あ", 3) '1が表示される
    Debug.Print InStrRev(str1, "あ", 2) '1が表示される
    Debug.Print InStrRev(str1, "あ", 1) '1が表示される
End Sub

5行目の引数は6で対象の文字列は(あいうあいう)です。位置の4が返ります。
6行目の引数は5で対象の文字列は(あいうあい)です。位置の4が返ります。
7行目の引数は4で対象の文字列は(あいうあ)です。位置の4が返ります。
8行目の引数は3で対象の文字列は(あいう)です。位置の1が返ります。
9行目の引数は2で対象の文字列は(あい)です。位置の1が返ります。
10行目の引数は1で対象の文字列は(あ)です。位置の1が返ります。

以下はMicrosoft公式のInStrRev関数のリンクです。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/instrrev-function

関連の記事

VBA IF文の使い方(条件分岐)

△上に戻る