【VBA】特定の文字を含むかを判定する方法(Like演算子、InStr関数)

VBA

VBAで、変数などに特定の文字(または文字列)を含むかを判定するには、「Like演算子」を使う方法と、「InStr関数」を使う方法の2通りがあります。

Excelのセル[A1]に、文字列「あいうえお」を含むかを判定する方法
※Excelのセルに限らず、文字列型の変数に対しても、同じように出来ます。

<方法1:Like演算子>
If Range("A1") Like "*あいうえお*" Then

<方法2:InStr関数>
If InStr(1, Range("A1"), "あいうえお") > 0 Then

順に解説していきますが、Like演算子のほうが直感的に見やすく、色々なことが出来るので、個人的にはお勧めです。
なお、処理速度は、ほとんど変わらないそうです。

Like演算子について

記述方法

If 文字列 Like 検索文字列 then

検索文字列の中には、ワイルドカード「*」を含めて下さい。
このように、If文の「=」の代わりに「Like」を記述することで、文字列のワイルドカード検索が出来ます。

例1

If "あいうえお" Like "*うえ*" Then
    MsgBox "あり"
Else
    MsgBox "なし"
End If

文字列 “あいうえお” の中に、”うえ” が含まれるかどうかを判定します。

結果

例2

ちなみに、こんなことも出来ます。

If "あいうえお" Like "うえ*" Then
    MsgBox "「うえ」で始まる"
Else
    MsgBox "「うえ」で始まらない"
End If

Likeの後ろに注目して下さい。
ワイルドカード「*」を、「うえ」の後ろにしか書いていません。
このように書くと、「うえ」で始まるかどうかを判定できます。

結果

注意点:否定文の書き方

否定文にしたい場合は、「Not」を書く位置に注意が必要です。
こんな風に、Ifの直後にNotを書きます。

If Not "あいうえお" Like "うえ*" Then
    MsgBox "「うえ」で始まらない"
End If

InStr関数について

記述方法

Instr(開始位置, 文字列, 検索文字列

引数については次のとおりです。

引数説明
開始位置何文字目から検索を始めるかを指定
文字列検索したい元のデータ
検索文字列検索する文字を指定する

戻り値には、該当した検索文字位置が返されます。

例1

MsgBox InStr(1, "あいうえお", "うえ")

文字列 “あいうえお” の中に、”うえ” が含まれる位置を1文字目から探し始めるので、結果(InStr関数の戻り値)は「3」(文字目)になります。

結果

例2

MsgBox InStr(1, "あいうえお", "か")

文字列 “あいうえお” の中に、”か” が含まれるかを1文字目から探し始めますが、”か” は “あいうえお” の中に含まれません。このような場合は、結果(InStr関数の戻り値)は「0」になります。

結果

InStr関数のまとめ

以上のことから

If InStr(1, 文字列A , 文字列B) > 0 Then

のようにすれば、「文字列A の中に 文字列B が含まれるか?」を判定することが出来ます。
文字列B が含まれれば、InStr関数の戻り値が「1以上」になるので、If文の条件を満たします。
文字列B が含まれなければ、InStr関数の戻り値が「0」になるので、If文の条件を満たさず、Else条件になります。

コメント

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