このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

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

2023年9月28日

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

今回はVBAで特定の文字列を含むか判定する方法を紹介します。

文字列を含むか判定する方法にはInstr関数を使う方法とLike演算子を使う方法があります。

基本的にはInstr関数でいいのですが、ワイルドカードを使いたいときにはLike演算子を使います。

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

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関数で文字を含むか調べたい場合

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

VBA

Posted by やろまい