概要

InStrRev関数は、Excel VBAで指定した文字列の末尾から部分文字列を検索し、その位置を返す関数です。通常のInStr関数とは逆に、検索を文字列の最後から開始するため、最後に出現する部分文字列の位置を見つけたい場合に非常に有効です。例えば、ファイルパスから最後のフォルダ名や拡張子を取得する際に便利です。

構文

InStrRev(文字列1, 文字列2, [開始位置], [比較モード])

パラメータ

  • 文字列1
    検索対象となる文字列です。

  • 文字列2
    検索する部分文字列です。

  • 開始位置(省略可能)
    検索を開始する位置を指定します。省略すると文字列の最後から検索が始まります。

  • 比較モード(省略可能)
    大文字と小文字の比較方法を指定します。

    • vbBinaryCompare(デフォルト):大文字と小文字を区別します。
    • vbTextCompare:大文字と小文字を区別しません。

戻り値

指定された部分文字列が見つかった場合は、その開始位置を返します。見つからなかった場合は0を返します。

使用例

基本的な使用例 - 末尾から部分文字列を検索

Sub ExampleInStrRev()
    Dim str As String
    Dim position As Integer

    str = "This is a test. This is only a test."

    ' "test" の最後の出現位置を検索
    position = InStrRev(str, "test")

    If position > 0 Then
        MsgBox "見つかった位置: " & position  ' 結果: 29
    Else
        MsgBox "見つかりませんでした"
    End If
End Sub

この例では、InStrRev関数を使用して、文字列の末尾から「test」を検索し、その最後の出現位置である29を取得しています。

大文字・小文字を区別しない検索

Sub InStrRevIgnoreCase()
    Dim str As String
    Dim position As Integer

    str = "Find the last occurrence of TEST here: test."

    ' "TEST" の最後の出現位置を検索(大文字・小文字を区別しない)
    position = InStrRev(str, "TEST", , vbTextCompare)

    If position > 0 Then
        MsgBox "見つかった位置: " & position  ' 結果: 41
    Else
        MsgBox "見つかりませんでした"
    End If
End Sub

この例では、vbTextCompareを指定することで、大文字・小文字を区別せずに「TEST」を検索しています。

開始位置を指定して検索

Sub InStrRevWithStartPosition()
    Dim str As String
    Dim position As Integer

    str = "Locate the target string here: target."

    ' 文字列の30文字目から末尾に向かって"target"を検索
    position = InStrRev(str, "target", 30)

    If position > 0 Then
        MsgBox "見つかった位置: " & position  ' 結果: 8
    Else
        MsgBox "見つかりませんでした"
    End If
End Sub

この例では、検索の開始位置を指定し、文字列の30文字目から末尾に向かって「target」を検索しています。

使用場面と注意点

  • 末尾からの検索

    文字列の最後に近い部分から部分文字列を見つけたい場合に使用します。ファイルパスやURLの解析において、最後のセクションを抽出する際に便利です。

  • 大文字・小文字の区別

    vbTextCompareを使用して大文字・小文字の区別を無効にすることで、柔軟な検索が可能になります。

  • 注意点

    開始位置が指定された場合、その位置から末尾に向かって検索が行われますが、文字列の範囲外の位置を指定すると正しく動作しません。

応用例 - ファイルパスから拡張子を取得

Sub GetFileExtension()
    Dim filePath As String
    Dim position As Integer
    Dim extension As String
    
    filePath = "C:\Users\Example\Document.txt"

    ' 最後の"."の位置を検索
    position = InStrRev(filePath, ".")

    If position > 0 Then
        extension = Mid(filePath, position + 1)  ' 拡張子を取得
        MsgBox "ファイルの拡張子は: " & extension  ' 結果: "txt"
    Else
        MsgBox "拡張子が見つかりませんでした"
    End If
End Sub

この例では、ファイルパスから最後のピリオドの位置を見つけ出し、そこから拡張子を取得しています。

まとめ

InStrRev関数は、文字列の末尾から検索を行い、最後の出現位置を簡単に特定できる便利な関数です。通常の検索が先頭から始まるのに対して、InStrRevは逆方向からの検索を可能にし、ファイル名やパスの解析、複数の同じ要素が存在するデータの操作において特に効果を発揮します。大文字・小文字の区別や検索開始位置を指定することもできるため、柔軟な文字列操作にぜひ活用してみてください。