01-VBA

演算子|Excel VBA (Part.6)【その他の演算子】Like演算子 | 現役エンジニア&プログラミングスクール講師

目標

VBAのLike演算子について理解し利用できる

演算子には算術演算子・比較演算子・論理演算子・代入演算子・連結演算子があります。この記事ではパターンマッチングを行ってくれるLike演算子について書いています。

Like演算子の概要と利用方法

Like演算子とは

文字列のパターンを比較しTrue/Falseの値を返してくれる演算子です。文字列の比較では正規表現が代表的ですが、VBAでは基本的に正規表現は利用できません。その代わりにLike演算子を利用してパターンマッチングを行います。

Like演算子の構文と利用方法

Like演算子の構文(1)

次の比較が合えば「True」  =『比較したい文字列』 Like 『比較用に準備した文字列』

次の比較が違えば「False」 =『比較したい文字列』 Like 『比較用に準備した文字列』

※比較は先頭の文字から行われます。比較用に準備した文字列までの内容で不一致があればFalseとなります。

Like演算子の利用例(1)

サンプルプロシージャ1
比較したい文字列「”abcdefg”」が比較用に準備した文字列「”abcdefg”」に一致していれば「True」を返します。
Sub LikeOperator1()

    If "abcdefg" Like "abcdefg" Then
        MsgBox "文字列は一致しています。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

Like演算子の構文(2)

次の比較が合えばTrue  =『比較したい文字列』 Like 『パターンマッチング規則』

次の比較が違えばFalse =『比較したい文字列』 Like 『パターンマッチング規則』

※比較は先頭の文字から行われます。パターンマッチング規則内で不一致があればFalseとなります。

Microsoft Learn を参考にすると次のように表現できます。

result = string Like パターン

resultに「True」か「False」が入ります。

stringに『比較したい文字列』

パターンに『パターンマッチング規則』

規則については実際に利用例を確認すると分かりやすいのでLike演算子の利用例(2)を早速確認していきます。

Like演算子の利用例(2)

サンプルプロシージャ2
「?」は任意の一文字を表現します。サンプルプロシージャでは左の文字列「abcdefg」が右の文字列「abc「任意の一文字」「任意の一文字」「任意の一文字」「任意の一文字」」と合っているかを確認しています。
Sub LikeOperator2()

    If "abcdefg" Like "abc????" Then
        MsgBox "文字列は一致しています。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

サンプルプロシージャ3
「*」は任意の0文字以上の文字を表現します。サンプルプロシージャでは左の文字列「abcdefg」が右の文字列「abc「0文字以上の文字」」と合っているかを確認しています。
Sub LikeOperator3()

    If "abcdefg" Like "abc*" Then
        MsgBox "文字列は一致しています。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

サンプルプロシージャ4
比較には変数を利用することができます。
Sub LikeOperator4()

    Dim str1 As String
    Dim str2 As String
    
    str1 = "a1a2a3a"
    str2 = "a1a??3a"

    If str1 Like str2 Then
        MsgBox "文字列は一致しています。"
    Else
        MsgBox "文字列パターンに一致しません。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

サンプルプロシージャ5
「#」は任意の一桁の数を表現します。サンプルプロシージャでは左の文字列「a1a2a3a」が右の文字列「a1a「任意の一文字」「任意の一桁の数値」3a4」と合っているかを条件で確認しています。「?」は一文字も一桁の数値も両方Trueを返しますが、#は比較対象が数値でないとFalseを返します。
 
※今回は「#」と比較する内容が「a」なので「False」を返すことになります。
Sub LikeOperator5()

    Dim str1 As String
    Dim str2 As String
    
    str1 = "a1a2a3a"
    str2 = "a1a?#3a"

    If str1 Like str2 Then
        MsgBox "文字列は一致しています。"
    Else
        MsgBox "文字列パターンに一致しません。"
    End If
    
End Sub

実行結果:条件はFalseとなります。

サンプルプロシージャ6
次のプロシージャは上のプロシージャの「?」と「#」の位置を変更した内容です。
※今回は「#」と比較する内容が「2」なので「True」を返すことになります。
Sub LikeOperator6()

    Dim str1 As String
    Dim str2 As String
    
    str1 = "a1a2a3a"
    str2 = "a1a#?3a"

    If str1 Like str2 Then
        MsgBox "文字列は一致しています。"
    Else
        MsgBox "文字列パターンに一致しません。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

サンプルプロシージャ7
[     ]は[     ]に含まれる任意の一文字を表現します。サンプルプロシージャでは
左の文字列「abcdefg」が右の文字列「「aからzまでの任意の一文字」「aからzまでの任意の一文字」「aからzまでの任意の一文字」「aからzまでの任意の一文字」「aからzまでの任意の一文字」「aからzまでの任意の一文字」「aからzまでの任意の一文字」」と合っているかを条件で確認しています。
 
※a-zの書き方について:「-」を利用すると『aからzまでの文字』と文字の範囲をアルファベット順で指定することができます。
Sub LikeOperator7()

    Dim str1 As String
    Dim str2 As String

    str1 = "abcdefg"
    str2 = "[a-z][a-z][a-z][a-z][a-z][a-z][a-z]"

    If str1 Like str2 Then
        MsgBox "文字列は一致しています。"
    Else
        MsgBox "文字列パターンに一致しません。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

サンプルプロシージャ8
上のプロシージャの繰り返しの部分をアスタリスクを利用して表現しています。アスタリスクは任意の0文字以上の文字という意味でした。
Sub LikeOperator8()

    Dim str1 As String
    Dim str2 As String

    str1 = "abcdefg"
    str2 = "[a-z]*"

    If str1 Like str2 Then
        MsgBox "文字列は一致しています。"
    Else
        MsgBox "文字列パターンに一致しません。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

サンプルプロシージャ9
大文字と小文字を分けて判断する時は次のプロシージャのように表現します。
Sub LikeOperator9()

    Dim str1 As String
    Dim str2 As String

    str1 = "abcABC"
    str2 = "[a-z]*cA[A-Z]*"

    If str1 Like str2 Then
        MsgBox "文字列は一致しています。"
    Else
        MsgBox "文字列パターンに一致しません。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

サンプルプロシージャ10
[     ]のなかで「!」を利用すると否定の意味になります。[!a-z]で「小文字のa
からzでないパターン」という意味になります。
Sub LikeOperator10()

    Dim str1 As String
    Dim str2 As String

    str1 = "abcABC"
    str2 = "[!A-Z]*A[A-Z]*"

    If str1 Like str2 Then
        MsgBox "文字列は一致しています。"
    Else
        MsgBox "文字列パターンに一致しません。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

サンプルプロシージャ11
[     ]の外で「!」を利用すると!を文字として比較します
Sub LikeOperator11()

    Dim str1 As String
    Dim str2 As String

    str1 = "!abcABC"
    str2 = "![!A-Z]*c[A-Z]*"

    If str1 Like str2 Then
        MsgBox "文字列は一致しています。"
    Else
        MsgBox "文字列パターンに一致しません。"
    End If
    
End Sub

実行結果:条件はTrueとなります。

サンプルプロシージャ12
※文字列の比較は先頭から行われます。一致部分が先頭から評価されるのでパターンに合わない並び方があればその時点でFalseが返されます。
Sub LikeOperator12()

    Dim str1 As String
    Dim str2 As String
    Dim str3 As String
    Dim str4 As String

    str1 = "!!!ABC!!!"
    str2 = "???[A-Z]*!"
    str3 = "???[A-Z][A-Z][A-Z][A-Z]"
    str4 = "?[A-Z]*"

    If str1 Like str2 Then
        MsgBox "!!!ABC!!!と???[A-Z]*!であれば、先頭からの評価は「!!!ABC!」で一致しているのでTrueが返ります。"
    End If
    
    If str1 Like str3 Then
    Else
        MsgBox "!!!ABC!!!と???[A-Z][A-Z][A-Z][A-Z]であれば、先頭から評価していくと最後の[A-Z]で不一致となるのでFalseが返ります。"
    End If
    
    If str1 Like str4 Then
    Else
        MsgBox "!!!ABC!!!と?[A-Z]*であれば、先頭から評価していくと二文字目で不一致となるのでFalseが返ります。"
    End If
    
End Sub

1つ目の実行結果:条件はTrueとなります。

2つ目の実行結果:条件はFalseとなります。

3つ目の実行結果:条件はFalseとなります。

今回の内容は以上となります。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】| 現役エンジニア&プログラミングスクール講師「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
01-VBA

初めてのExcelVBA:開発タブの表示 | 現役エンジニア&プログラミングスクール講師

2022年8月5日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

初めてのExcelVBA:「モジュールとプロシージャ」+マクロブックの保存方法 | 現役エンジニア&プログラミングスクール講師

2022年8月6日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

ExcelVBAのEndプロパティ(1)| 現役エンジニア&プログラミングスクール講師

2022年8月20日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の「デバッグ」(Part.2)「ステップモード」「ブレークポイント」| 現役エンジニア&プログラミングスクール講師

2022年12月14日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の 配列(サンプルプロシージャの利用)| 現役エンジニア&プログラミングスクール講師

2022年12月25日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

制御構文|Excel VBA (Part.3)【If Then】ネスト・論理演算子利用編 | 現役エンジニア&プログラミングスクール講師

2022年11月11日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site