Excel VBA 文字列の位置を取得する(InStr/InStrRev)

Excel VBAのInStr関数とInStrRev関数で、文字列の位置を取得するサンプルです。

目次

文字列 前から検索し最初の文字列の位置を取得する(InStr)
  検索開始位置を指定する(InStr)
  後から検索し最初の文字列の位置を取得する(InStrRev)
  検索開始位置を指定する(InStrRev)

前から検索し最初の文字列の位置を取得する(InStr)

InStr([ start ], string1, string2, [ compare ])
  • 引数のstring1は検索元の文字列です。
  • 引数のstrings2は検索する文字列です。
  • 前から検索し、指定した文字が最初に見つかった位置を取得します。
  • 先頭の1文字目の位置は1です。
  • 引数のstartは検索開始位置です。省略可能です。
  • 存在しないときは、0を返します。
  • 以下はMicrosoft公式のInStr関数のリンクです。
    https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/instr-function

コード

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行目は、変数に文字列を代入しています。
5~8行目は、前から検索し引数の文字列が最初に見つかった位置を返しています。
9行目は、該当の文字がないので-1が返ります。
12行目は、変数に日本語の文字列を代入しています。
13~15行目は、前から検索し引数の文字列が最初に見つかった位置を返しています。

検索開始位置を指定する(InStr)

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

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

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

後から検索し最初の文字列の位置を取得する(InStrRev)

InstrRev(stringcheck, stringmatch, [ start, [ compare ]])
  • 引数のstringcheckは検索元の文字列です。
  • 引数のstringmatchは検索する文字列です。
  • 後から検索し、指定した文字が最初に見つかった位置を取得します。
  • 先頭の1文字目の位置は1です。
  • 引数のstartは検索開始位置です。省略可能です。
  • 存在しないときは、0を返します。
  • 以下はMicrosoft公式のInStrRev関数のリンクです。
    https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/instrrev-function

コード

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行目は、変数に文字列を代入しています。
5~8行目は、後ろから検索し引数の文字列が最初に見つかった位置を返しています。
9行目は、該当の文字がないので-1が返ります。
12行目は、変数に日本語の文字列を代入しています。
13~15行目は、後ろから検索し引数の文字列が最初に見つかった位置を返しています。

検索開始位置を指定する(InStrRev)

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が返ります。

関連の記事

Excel VBAのIF文のサンプル

△上に戻る