VBA関数の「Instr」関数で指定した文字列を含んでいるか検索する方法をご説明します。
Instr関数は本来は検索したい文字列を、検索する文字列で検索して見つかった位置を返す関数ですが、その特性を活かして、指定した文字列が含まれているかどうかを調べる事が出来ます。
「=」イコールかどうかではなく、部分一致した文字列を検索する際に非常に便利です。
シート名やセルに入力された文字列などを検索する等、使用頻度が高い関数かと思います。
指定した文字列の検索した結果の位置の取得から、文字列を含むセルの取得や、文字列が含まれるシート名の取得方法についてもご説明します。
検索対象が異なりますが、部分一致で検索する方法として「指定の文字列をFind、FindNextで検索する方法」などもありますので、ご覧ください。
1.Instr関数の使い方
Instr関数は検索したい文字列を、検索する文字列で検索して見つかった位置を返す関数です。
構文は次のように記述します。
『InStr([ start ], string1, string2, [ compare ])』
少しわかりにくいので、わかりやすく書くとこのような感じです。
「Instr([ 検索開始位置],検索したい文字列,検索する文字列,[比較方法])」
戻り値は数値型(Long)で一致が見つからなかった場合は0、見つかった場合は一致が見つかった位置を返します。
Instr関数の引数一覧
引数 | 省略 | 説明 |
start | 省略可能 | それぞれの検索の開始位置を設定する数値式です。 省略すると、最初の文字の位置から検索がstartされます。 startにNull が含まれる場合、エラーが発生します。 compareが指定されている場合は、start引数が必要です。 |
string1 | 必須 | 検索元の文字列式です。 |
string2 | 必須 | 検索場所となる文字列式を指定します。 |
compare | 省略可能 | 文字列比較の種類を指定します。 compare が Nullの場合、エラーが発生します。 compare が省略された場合、OptionCompare設定は比較のタイプを決定します。 ロケール固有のルールで比較するために有効なLCID(LocaleID)を指定します。 |
compareの定数一覧
定数名 | 説明 |
vbBinaryCompare | バイナリ比較(大文字/小文字、半角/全角を区別する)を実行します。 |
vbTextCompare | 大文字/小文字、半角/全角を 区別しない。 |
デフォルトではvbBinaryCompareが既定値となります。
2.サンプルコード
使い方の説明は複雑に感じましたが、実際の用途としてはとてもシンプルです。
指定した文字列の検索位置を取得する
次のコードは「ABCDEFG」の中から「B」を左から検索して一致した位置を取得します。
Sub Sample1()
Dim mystr As String
mystr = "ABCDEFG"
MsgBox InStr(mystr, "B")
End Sub
指定した文字列を含むセルを取得する
次のデータから「2018」を含むセルの値を取得します。
Sub Sample2()
Dim i As Long
Dim mystr As String
For i = 1 To 10
If InStr(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 InStr(WS.Name, "2018") <> 0 Then
WS.Delete
End If
Next
Application.DisplayAlerts = True
End Sub