【VBA】文字列を含むか判定する方法(Instr関数/Like演算子)
今回はVBAで特定の文字列を含むか判定する方法を紹介します。
文字列を含むか判定する方法にはInstr関数を使う方法とLike演算子を使う方法があります。
基本的にはInstr関数でいいのですが、ワイルドカードを使いたいときにはLike演算子を使います。
Instr関数を使って文字列を含むか判定する
VBAではInstr関数を使って文字列を含むか判定できます。
Sub InstrSample1()
Const str As String = "アイウエオ"
If InStr(str, "ア") > 0 Then MsgBox "strはアを含む"
End Sub
上のプログラムのように、InStr > 0と比較することで「特定の文字列」を含むかを判定することができます。
上のサンプルコードでは"アイウエオ"の中に"ア"が含むかを判定しています。
Instr関数は「ある文字列」の中に「特定の文字列」が、最初に現れる位置を返します。
そして、「特定の文字列」がない場合は0を返します。
この性質を利用して、特定の文字列を含んでいるかを判定しています。(特定の文字列を含むと0より大きな数字になる)
比較モードで大文字・半角・カタカナの区別なしが可能
Sub InstrSample2()
Const str As String = "アイウエオ"
'「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別する(デフォルト値)
If InStr(1, str, "あ", vbBinaryCompare) > 0 Then
MsgBox "vbBinaryCompare"
End If
'区別しない。
If InStr(1, str, "あ", vbTextCompare) > 0 Then
MsgBox "vbTextCompare"
End If
End Sub
Instr関数には比較モードというものがあり、これを設定すると「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を同じだと判定することができます。
大文字と小文字を同じと判定したい、半角と全角を同じとしたい、という場合にはこの比較モードを利用してみてください。
InStr(開始位置, 検索元, 検索ワード, 比較モード)
比較モードを使うときには、Instr関数の4つの引数をすべて指定する必要があります。
全文字で判定したい場合は開始位置は1にして、比較モードにはvbTextCompareを入れてください。
Like演算子を使って文字列を含むか判定する
Sub LikeSample1()
Const str As String = "アイウエオ"
If str Like "*ア*" Then MsgBox "strはアを含む"
End Sub
Like演算子は「文字列 Like 文字列」の形で使用します。
Like演算子ではワイルドカードが使用可能で、サンプルコードのように"*ア*"とするとInstr関数と同じようにアを含むといった判定ができます。
Sub LikeSample2()
Const str As String = "アイウエオ"
If str Like "ア*" Then MsgBox "strはアから始まる"
End Sub
Sub LikeSample3()
Const str As String = "アイウエオ"
If str Like "*オ" Then MsgBox "strはオで終わる"
End Sub
他にもワイルドカードの使い方を変えれば、~から始まる、~で終わるといった指定の仕方もできます。
《関連記事》
Excel関数で文字を含むか調べたい場合