Excel VBA InStrRev関数で後ろから文字列を検索する

VBA関数

VBA関数の「InStrRev関数」で対処とした文字列の中から、指定した文字列を後ろから検索する方法をご説明します。

後ろから文字列を検索する際に使用すると非常に便利な関数です。

また、Insrt関数同様に部分一致する文字列を含んでいるか検索する場合にも使用できます。

文字列の検索だけではなく、含んでいるか判定する場合のサンプルコードも記載したいと思います。

前から文字列を検索する場合は「Insrt関数」を使用します。

1.InStrRev関数の使い方

InStrRev関数は、対処とした文字列の後ろから指定の文字列を検索し、最初に見つかった位置を返します。

次のように記述します。

InStrRev(string1, string2, [ start ], [ compare ])

少しわかりにくいので、わかりやすく書くとこのような感じです。

InStrRev(検索したい文字列,検索する文字列,[ 検索開始位置],[比較方法])

戻り値は数値型(Long)で一致が見つからなかった場合は0、見つかった場合は一致が見つかった位置を返します

検索は後ろから開始しますが、検索開始位置や戻り値は後ろから数えるわけではなく、先頭から数えますのでご注意ください。

引数省略説明
string1必須検索元の文字列式です。
string2必須検索場所となる文字列式を指定します。
start省略可能それぞれの検索の開始位置を設定する数値式です。
省略すると-1が使用され、最後の文字の位置から検索されます。
startにNull が含まれる場合、エラーが発生します。
compare省略可能文字列比較の種類を指定します。
compare が省略された場合、OptionCompare設定は比較のタイプを決定します。 
compareの定数一覧
定数名説明
vbUseCompareOption-1OptionCompareステートメントの設定を使用して比較を行います。
vbBinaryCompare0バイナリ比較(大文字/小文字、半角/全角を区別する)を実行します
vbTextCompare1大文字/小文字、半角/全角を 区別しない

デフォルトではvbBinaryCompareとなります。

2.サンプルコード

指定した文字列の検索位置を取得する

次のコードは「ABCDEFG」の中から「B」を後ろから検索して一致した位置を取得します。

一見後ろから検索するため、戻り値は6になるきがしますが、先頭から数えるため2となります。

Sub Sample1()

Dim mystr   As String

mystr = "ABCDEFG"

MsgBox InStrRev(mystr, "B")

End Sub

指定した文字列を含むセルを取得する

Insrt関数でも可能ですが、InStrRev関数でも同様の事が可能です。

次のデータから「2018」を含むセルの値を取得します。

Sub Sample2()

Dim i       As Long
Dim mystr   As String

For i = 1 To 10

    If InStrRev(Cells(i, 1), "2018") <> 0 Then
    
        mystr = mystr & vbLf & Cells(i, 1)
    
    End If
    
Next i
    
MsgBox mystr

End Sub

指定した文字列を含むシートを取得する

次のコードは2018を含むシート名のシートのみ削除します。

Sub Sample3()

Dim WS As Worksheet

Application.DisplayAlerts = False

For Each WS In Worksheets

    If InStrRev(WS.Name, "2018") <> 0 Then
    
        WS.Delete
    
    End If
    
Next

Application.DisplayAlerts = True

End Sub
タイトルとURLをコピーしました