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条件になります。
コメント