【ExcelVBA・マクロ】Like演算子の使い方|ワイルドカードで文字列パターンを柔軟に判定する方法【コピペOK】

ExcelVBA

ExcelVBAで文字列を判定するとき、「特定の文字で始まるか」「決まった桁数の数字か」といった条件を、InStr関数や複数のIf文を組み合わせて書いていませんか。実はVBAにはLike演算子という、ワイルドカードを使って文字列パターンを直感的に判定できる機能があります。

この記事では、Like演算子の基本構文から、実務でよく使うパターン例、InStr関数・RegExpオブジェクトとの使い分けまで、コピペで使えるサンプルコード付きで解説します。

スポンサーリンク
スポンサーリンク

Like演算子とは

Like演算子は、文字列が指定したパターンに一致するかどうかをTrueまたはFalseで返す演算子です。ワイルドカード文字を使うことで、「〇〇で始まる」「△△を含む」「数字が3桁」といった条件を1行で表現できます。

基本構文は以下の通りです。

結果 = 文字列 Like パターン

簡単な例を見てみましょう。

Sub LikeSample()
    Dim result As Boolean
    result = "Excel VBA" Like "Excel*"
    Debug.Print result  ' True
End Sub

"Excel*"というパターンは「Excelで始まる文字列」を意味します。*(アスタリスク)は0文字以上の任意の文字列に一致するワイルドカードです。

Like演算子で使えるワイルドカード文字

Like演算子では、以下のワイルドカード文字が使用できます。

文字 意味
* 0文字以上の任意の文字列
? 任意の1文字
# 任意の1桁の数字(0〜9)
[文字列] 指定した文字のいずれか1文字
[!文字列] 指定した文字以外の1文字

アスタリスク(*)で部分一致を判定する

Sub CheckStartsWith()
    Dim s As String
    s = "請求書_2026年8月.xlsx"

    If s Like "請求書*" Then
        Debug.Print "請求書ファイルです"
    Else
        Debug.Print "対象外のファイルです"
    End If
End Sub

シャープ(#)で桁数付きの数字を判定する

郵便番号や社員コードのように、桁数が決まっている数字を判定するときに便利です。

Sub CheckZipCode()
    Dim zipCode As String
    zipCode = "123-4567"

    If zipCode Like "###-####" Then
        Debug.Print "正しい郵便番号の形式です"
    Else
        Debug.Print "形式が不正です"
    End If
End Sub

角かっこ([])で文字の範囲を指定する

角かっこの中にハイフンで範囲を指定すると、「アルファベットのA〜Zのいずれか」のような判定もできます。

Sub CheckCode()
    Dim itemCode As String
    itemCode = "A-102"

    If itemCode Like "[A-Z]-###" Then
        Debug.Print "コードの形式は正しいです"
    Else
        Debug.Print "コードの形式が不正です"
    End If
End Sub

実務で使えるLike演算子の活用例

ファイル名から特定の拡張子だけを処理する

フォルダ内のファイルを一括処理するとき、拡張子をLike演算子で絞り込むと簡潔に書けます。

Sub ListExcelFiles()
    Dim fileName As String
    Dim folderPath As String
    folderPath = "C:\Data\"

    fileName = Dir(folderPath)
    Do While fileName <> ""
        If fileName Like "*.xlsx" Or fileName Like "*.xlsm" Then
            Debug.Print fileName & " はExcelファイルです"
        End If
        fileName = Dir()
    Loop
End Sub

セルの入力チェックに使う

ユーザーが入力したデータの形式チェックにもLike演算子は役立ちます。以下は、メールアドレスの簡易チェック例です(厳密な検証にはRegExpの方が向いていますが、簡易チェックならLike演算子で十分です)。

Sub CheckEmailFormat()
    Dim mailAddress As String
    mailAddress = Range("A1").Value

    If mailAddress Like "*@*.*" Then
        Debug.Print "メールアドレスの形式です"
    Else
        MsgBox "メールアドレスの形式が不正です", vbExclamation
    End If
End Sub

複数条件をOrでつなげて判定する

Sub CheckCategory()
    Dim productName As String
    productName = "ノートPC-15インチ"

    If productName Like "*PC*" Or productName Like "*パソコン*" Then
        Debug.Print "PC関連商品です"
    End If
End Sub

InStr関数・RegExpオブジェクトとの使い分け

VBAで文字列パターンを判定する方法は、Like演算子のほかにInStr関数やRegExpオブジェクトもあります。それぞれの特徴を整理すると、以下のように使い分けるのがおすすめです。

  • InStr関数:単純に「特定の文字列が含まれているか」だけを調べたいときに使う。処理速度が最も速い。
  • Like演算子:桁数や文字種の組み合わせなど、ある程度複雑なパターンを1行で表現したいときに使う。ワイルドカードで直感的に書ける。
  • RegExpオブジェクト:メールアドレスの厳密な検証や、文字列の一部を抽出したい場合など、より高度なパターンマッチングが必要なときに使う。事前に参照設定またはCreateObjectが必要。

処理速度を重視する単純な部分一致であればInStr関数、桁数や文字種を含めた形式チェックであればLike演算子、複雑な抽出処理が必要であればRegExpオブジェクトを選ぶとよいでしょう。RegExpオブジェクトの詳しい使い方は、当ブログの別記事「RegExpオブジェクトの使い方」もあわせてご覧ください。

Like演算子を使うときの注意点

Like演算子は大文字・小文字を区別します。大文字・小文字を区別せずに判定したい場合は、モジュールの先頭にOption Compare Textを記述するか、UCase関数やLCase関数で文字列を統一してから比較しましょう。

Option Compare Text

Sub CheckIgnoreCase()
    Debug.Print "EXCEL" Like "excel*"  ' Option Compare Text指定でTrue
End Sub

Option Compare Textをモジュール全体に適用したくない場合は、以下のように大文字に統一してから比較する方法もあります。

Sub CheckIgnoreCase2()
    Dim s As String
    s = "EXCEL VBA"

    If UCase(s) Like UCase("excel*") Then
        Debug.Print "一致しました"
    End If
End Sub

まとめ

Like演算子を使うと、ワイルドカード文字(*?#[])を組み合わせるだけで、複雑な条件分岐を書かずに文字列パターンを判定できます。ファイル名の絞り込みや入力チェックなど、実務のさまざまな場面で活用できる便利な機能です。

InStr関数やRegExpオブジェクトと比べてどれを使うか迷ったときは、この記事の使い分けを参考に、目的に合った方法を選んでみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました