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 | -1 | OptionCompareステートメントの設定を使用して比較を行います。 |
vbBinaryCompare | 0 | バイナリ比較(大文字/小文字、半角/全角を区別する)を実行します |
vbTextCompare | 1 | 大文字/小文字、半角/全角を 区別しない |
デフォルトでは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