Excel VBA Instr関数の使い方と指定した文字列が含まれるか検索する

VBA関数

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
タイトルとURLをコピーしました