【VBA】文字列を含むか判定する方法(Instr関数/Like演算子)

2022年10月26日

【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

他にもワイルドカードの使い方を変えれば、~から始まる、~で終わるといった指定の仕方もできます。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
VBAの作成依頼はこちらから

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2022/12/08 14:44:42時点 Amazon調べ-詳細)

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい