【2026年8月最新】VBAのLike演算子完全ガイド|ワイルドカード・エスケープ・否定パターンの使い方

【2026年8月最新】VBAのLike演算子完全ガイド|ワイルドカード・エスケープ・否定パターンの使い方

「セルの値が特定のパターンに一致するかどうかを判定したい」「ファイル名の先頭が"見積書_"で始まるものだけ処理したい」「型番の末尾3桁が数字のデータだけ抽出したい」——こうしたあいまいな条件での文字列判定を、Excel VBAで実現する手段の1つが「Like演算子」です。

Like演算子は、正規表現ほど複雑な記法を覚えなくても、ワイルドカード(*・?・#)を使った直感的な書き方でパターンマッチングができるのが特徴です。一方で、文字リスト[charlist]の範囲指定や否定パターン[!charlist]、記号自体をエスケープする方法など、初見だとつまずきやすいポイントも複数あります。

代表菅澤 代表菅澤
弊社では業務マクロを作るとき、ファイル名の仕分けやコードの妥当性チェックでLike演算子をよく使います。正規表現ほど大げさな道具立てが要らない分、「ちょっとしたパターン判定」であればLike演算子の方がコードがシンプルになる場面が多いです。
AI鬼管理山崎 AI鬼管理山崎
この記事では、Like演算子の基本構文からワイルドカードの4種類、文字リストや否定パターン、エスケープの書き方まで、コード例付きで整理していきます。最後に「そもそもこのパターン設計自体を人に任せる方法」についても触れます。

この記事を最後まで読むと、次の内容が理解できます。

✔️Like演算子の基本構文:「文字列 Like パターン」の書き方と戻り値
✔️ワイルドカード文字4種類:* ? # [charlist] それぞれの意味と使い分け
✔️否定パターン[!charlist]:特定の文字を「含まない」条件の書き方
✔️エスケープ処理:*や?、#そのものを検索文字として扱う方法
✔️InStr・Replace・RegExpとの使い分け:どの場面でLikeを選ぶべきか
✔️業務での実践パターン:ファイル名フィルタ・データ検証・コード判定への応用
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年8月最新】VBAのLike演算子完全ガイド|ワイルドカード・エスケープ・否定パターンの使い方
VBAのLike演算子を徹底解説。ワイルドカード(* ? # [charlist])の使い方、否定パターン[!charlist]、特殊文字のエスケープ、InStrやRegExpとの使い分けまでコード例付きで整理。文字列処理を効率化する方法も紹介します。

01 Like演算子とは何か・ワイルドカードで文字列比較する仕組み 「一致するか」ではなく「パターンに合うか」を判定する演算子

Like演算子は、VBAで文字列が特定の「パターン」に一致するかどうかをTrue/Falseで判定する演算子です。「=」演算子が「完全に同じ文字列かどうか」しか判定できないのに対して、Like演算子は「先頭が○○で始まる」「末尾が○○で終わる」「特定の文字種を含む」といった、あいまいな条件でのパターン一致を1行で表現できます。

📚 用語解説

Like演算子:VBAの組み込み演算子の1つ。「文字列 Like パターン文字列」という構文で、左辺の文字列が右辺のパターンに一致するかをTrue/Falseで返す。パターン側にワイルドカード文字(* ? # [charlist])を組み合わせて、あいまいな条件のマッチングを行う。

たとえば「顧客コードが"C"で始まり、その後に4桁の数字が続く」という条件は、正規表現なら^C\d{4}$のように書きますが、Like演算子であれば"C" & String(4, "#")を組み立てるか、直接"C####"というパターン文字列を書くだけで判定できます。記号の意味さえ覚えれば、正規表現よりも直感的に読めるのがLike演算子の強みです。

' Like演算子の基本構文
Sub LikeBasicExample()
    Dim result As Boolean

    result = "見積書_20260801.xlsx" Like "見積書_*"
    MsgBox result   ' True("見積書_"で始まる)

    result = "C1234" Like "C####"
    MsgBox result   ' True(Cの後に数字4桁)

    result = "Apple" Like "A??le"
    MsgBox result   ' True(A + 任意2文字 + le)
End Sub

構文の基本は「文字列 Like パターン」で、パターン側にだけワイルドカード文字を書ける点がポイントです。左辺の文字列にワイルドカードを書いても記号としては解釈されず、リテラルな文字として扱われます。

📚 用語解説

パターンマッチング:ある文字列が、あらかじめ定義した「型(パターン)」に当てはまるかどうかを判定する処理全般を指す用語。Like演算子のワイルドカード方式や、正規表現(RegExp)方式など、複数の実現方法がある。

対象の文字列
セル・変数の値
パターン文字列
ワイルドカードで条件を記述
Like演算子で判定
string Like pattern
True / False
If文・フィルタ条件に利用
AI鬼管理山崎 AI鬼管理山崎
Like演算子は既定では大文字・小文字を区別する「バイナリ比較」で動作します。モジュールの先頭にOption Compare Textを書くと「テキスト比較」になり、大文字小文字を区別しなくなります。この挙動を知らずに「なぜかマッチしない」とハマる人が意外と多いです。

📚 用語解説

Option Compare Text / バイナリ比較:VBAモジュールの文字列比較モードを指定する宣言。既定は「バイナリ比較(Option Compare Binary)」で大文字小文字を区別する。モジュール冒頭にOption Compare Textと書くと「テキスト比較」となり、Like演算子や"="での文字列比較が大文字小文字を無視するようになる。

💡 比較モードの確認を忘れずに

Like演算子の判定結果が「想定と違う」と感じたら、まずモジュール先頭にOption Compare Textの宣言があるかどうかを確認してください。他のモジュールからコピーしたコードに紛れ込んでいるケースが典型的な原因です。

02 基本構文とワイルドカード文字4種類 * ? # [charlist] それぞれの意味を正確に押さえる

Like演算子で使えるワイルドカード文字は、基本的に4種類です。それぞれ「何文字にマッチするか」「どんな種類の文字にマッチするか」が異なるため、まずは一覧で全体像を押さえます。

ワイルドカード意味一致する文字数マッチする文字列例
*(アスタリスク)任意の文字(0文字以上)0文字〜任意の長さ"A*Z"AZ, ABZ, ABCXYZ
?(クエスチョン)任意の1文字必ず1文字"A?Z"ABZ, A1Z(AZやABCZは不一致)
#(シャープ)任意の1桁の数字(0〜9)必ず1文字(数字のみ)"A#Z"A1Z, A9Z(ABZは不一致)
[charlist]charlist内のいずれか1文字必ず1文字"[ABC]12"A12, B12, C12

特に重要なのは、「*」だけが0文字以上の可変長にマッチするという点です。「?」と「#」は必ず1文字分を消費するため、桁数が固定されているデータの検証(郵便番号・電話番号・型番など)に向いています。逆に「先頭一致・末尾一致・部分一致」のような可変長条件には「*」を使います。

' ワイルドカード4種類の使い分け例
Sub WildcardTypes()
    ' * : 任意の文字数(0文字以上)に一致
    Debug.Print "invoice_2026.pdf" Like "invoice_*"        ' True

    ' ? : ちょうど1文字に一致
    Debug.Print "A1Z" Like "A?Z"                             ' True
    Debug.Print "ABCZ" Like "A?Z"                            ' False(2文字あるので不一致)

    ' # : ちょうど1桁の数字に一致
    Debug.Print "A1Z" Like "A#Z"                             ' True
    Debug.Print "AXZ" Like "A#Z"                             ' False(数字ではない)

    ' [charlist] : リスト内のいずれか1文字に一致
    Debug.Print "商品A" Like "商品[ABC]"                     ' True
    Debug.Print "商品D" Like "商品[ABC]"                     ' False
End Sub

2-1. 固定長パターンでの桁数チェック

「#」は数字1桁専用のワイルドカードなので、郵便番号・電話番号・社員番号のような桁数が決まった数値データの形式チェックにそのまま使えます。たとえば日本の郵便番号(ハイフンあり7桁)は"###-####"というパターン1本で判定可能です。

データ種別パターン例判定内容
郵便番号"###-####"3桁-4桁の数字形式かどうか
社員番号"S#####"Sの後に数字5桁が続くかどうか
西暦4桁"####"数字4桁ちょうどかどうか
携帯電話番号"0[789]0-####-####"070/080/090で始まる11桁形式かどうか
代表菅澤 代表菅澤
「#」を並べれば桁数チェックができるので、Excelの入力規則だけでは表現しづらい「数字っぽいが実は文字列として入力されている」ようなセルの検証にも便利です。IsNumeric関数だけだと桁数までは見てくれないので、そこをLike演算子で補完するイメージです。

03 文字リスト[charlist]と範囲指定 [A-Z]のような範囲指定と、複数条件の組み合わせ方

[charlist]は、角括弧の中に列挙した文字のいずれか1文字にマッチするワイルドカードです。単に文字を並べる書き方([ABC])のほかに、ハイフンでつないだ範囲指定[A-Z])も使えます。範囲指定と個別指定は同じ角括弧の中で組み合わせることも可能です。

📚 用語解説

文字リスト(charlist):Like演算子のワイルドカード[ ]の中に書く、マッチ対象とする文字の集合。個別の文字を並べる書き方([ABC])と、文字コード順の範囲を示すハイフン区切りの書き方([A-Z])の両方に対応する。範囲は昇順(若いコード→大きいコード)で書く必要があり、[Z-A]のような降順指定はエラーになる。

' 文字リスト・範囲指定の例
Sub CharListExamples()
    ' 個別の文字リスト
    Debug.Print "商品A" Like "商品[ABC]"          ' True

    ' 範囲指定(アルファベット大文字)
    Debug.Print "Zebra" Like "[A-Z]*"              ' True(先頭が大文字アルファベット)

    ' 範囲指定(数字)
    Debug.Print "5個入り" Like "[0-9]個入り"       ' True

    ' 範囲と個別文字の組み合わせ
    Debug.Print "X99" Like "[A-Za-z0-9][0-9][0-9]" ' True(英数字1文字+数字2桁)

    ' 降順の範囲指定はエラーになる(実行時エラー)
    ' Debug.Print "A" Like "[Z-A]"                 ' エラー:不正な範囲
End Sub

実務でよく使うのは、「先頭が半角英大文字で始まるコードだけを抽出したい」というようなケースです。[A-Z]*と書くだけで、全角文字や数字始まりのコードを除外できます。範囲指定は文字コードの並び順に依存するため、全角文字を範囲指定に混ぜると意図しない挙動になりやすい点は注意が必要です。

⚠️ 全角文字の範囲指定は避ける

[ぁ-ん]のような全角文字の範囲指定は、環境(文字コード)によって挙動が変わる可能性があります。日本語の文字種を判定したい場合は、範囲指定に頼らず、AscW関数で文字コードを取得して数値で比較する方が安全です。

3-1. 複数の範囲を1つの[ ]内に混在させる

[A-Za-z0-9]のように、英大文字・英小文字・数字の3つの範囲を1つの角括弧内にまとめて書くこともできます。これは「英数字1文字」を表す定番パターンとして、型番や商品コードの検証で頻出します。

✔️[A-Z] → 半角英大文字1文字
✔️[a-z] → 半角英小文字1文字
✔️[0-9] → 半角数字1文字(#と同じ意味)
✔️[A-Za-z] → 半角英字1文字(大文字・小文字どちらでも可)
✔️[A-Za-z0-9] → 半角英数字1文字
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 否定パターン[!charlist]の使い方 「含まない」「一致しない」条件をLike演算子で書く

文字リストの先頭に「!」を付けると、「charlist内のいずれにも一致しない1文字」という否定条件になります。「数字を含まない」「特定の記号だけを弾きたい」といった、除外条件のバリデーションで威力を発揮します。

📚 用語解説

否定パターン [!charlist]:Like演算子の文字リストにおいて、角括弧の先頭に感嘆符(!)を付けた記法。charlist内に列挙した文字のいずれにも一致しない1文字にマッチする。例えば[!0-9]は「数字以外の1文字」を意味する。

' 否定パターンの例
Sub NegationExample()
    ' 数字を含まない文字列かどうか(1文字ずつ判定が必要な場合)
    Debug.Print "abc" Like "[!0-9][!0-9][!0-9]"     ' True(3文字とも数字ではない)
    Debug.Print "a1c" Like "[!0-9][!0-9][!0-9]"     ' False(2文字目が数字)

    ' 先頭が数字で始まっていない文字列か
    Debug.Print "商品コード" Like "[!0-9]*"          ' True(先頭は数字ではない)
    Debug.Print "123コード" Like "[!0-9]*"           ' False(先頭が数字)
End Sub

注意したいのは、[!charlist]はあくまで「1文字」に対する否定であり、「文字列全体にcharlistの文字が1つも含まれない」ことを保証するものではない点です。文字列全体に対して「特定の文字を一切含まない」ことを判定したい場合は、[!charlist]を文字数分並べるか、後述するInStr関数との組み合わせが現実的です。

⚠️ 否定パターンの誤解に注意

"abc123" Like "[!0-9]*" は先頭1文字が数字でないかを判定しているだけで、文字列全体に数字が含まれないかは判定していません。実際にこの例は先頭が"a"なのでTrueになりますが、文字列全体には数字が含まれています。「全体に含まれない」条件にはInStrとの組み合わせが必要です。

' 「文字列全体に特定の文字を含まない」を正しく判定する
Function ContainsNoDigit(s As String) As Boolean
    Dim i As Long
    For i = 1 To Len(s)
        If Not (Mid(s, i, 1) Like "#") Then
            ' 数字以外の文字が来ても継続チェック
        Else
            ContainsNoDigit = False
            Exit Function
        End If
    Next i
    ContainsNoDigit = True
End Function

' もしくはInStr系で判定する方がシンプル
Function ContainsNoDigit2(s As String) As Boolean
    Dim i As Long
    For i = 0 To 9
        If InStr(s, CStr(i)) > 0 Then
            ContainsNoDigit2 = False
            Exit Function
        End If
    Next i
    ContainsNoDigit2 = True
End Function
代表菅澤 代表菅澤
否定パターンは「1文字単位の否定」だという前提を忘れると、思わぬバグの温床になります。弊社でも過去に「数字を含まないはず」の条件で数字混じりのデータをすり抜けさせてしまった経験があり、以来「全体否定」と「1文字否定」を明確に分けて設計するようにしています。

05 エスケープ処理:ワイルドカード文字自体を検索する *・?・#・[・]をリテラル文字として扱う方法

ワイルドカード文字(* ? # [ ])そのものを「特殊記号ではなく、ただの1文字」として検索したい場面もあります。たとえば「文字列内に実際のアスタリスク記号"*"が含まれているか」を判定したいケースです。この場合は、該当の記号を角括弧[ ]で囲むことでエスケープできます。

📚 用語解説

エスケープ処理:プログラミングにおいて、特別な意味を持つ記号を「意味を持たないただの文字」として扱わせるための処理。Like演算子では、ワイルドカード記号(* ? #)を角括弧[ ]で囲むことでエスケープし、リテラルな1文字として検索できる。

' ワイルドカード文字自体をエスケープして検索する
Sub EscapeExample()
    ' "*"をリテラル文字として検索したい場合は [*] と書く
    Debug.Print "3*4=12" Like "3[*]4*"        ' True(実際の"*"に一致)

    ' "?"をリテラル文字として検索
    Debug.Print "OK?" Like "OK[?]"            ' True

    ' "#"をリテラル文字として検索
    Debug.Print "No.#5" Like "No.[#]5"        ' True

    ' "]"(閉じ角括弧)は charlist 内でリテラルとして表現する記法が無いため、
    ' 角括弧の外にそのまま書けばリテラルな1文字として扱われる("]"自体はワイルドカードではない)
    Debug.Print "A]B" Like "A]B"              ' True

    ' "-"(ハイフン)は charlist の先頭か末尾に置くとリテラル扱いになる
    Debug.Print "A-B" Like "A[-]B"            ' True
End Sub

つまり、「[ ]で囲んだ記号は特殊な意味を失い、そのままの文字として扱われる」というのがエスケープの基本原理です。正規表現でのバックスラッシュ(\)によるエスケープと考え方は似ていますが、書き方が異なるため混同しないよう注意してください。

エスケープしたい文字Like演算子での書き方正規表現での書き方(参考)
*(アスタリスク)[*]\*
?(クエスチョン)[?]\?
#(シャープ)[#]該当なし(\dで代替)
](閉じ角括弧)角括弧の外にそのまま書く(charlist内では表現不可)\]
-(ハイフン)[-](charlistの先頭か末尾に置く)\-
💡 複数の記号をまとめてエスケープする

複数の記号を1つの角括弧内にまとめてエスケープすることも可能です。たとえば"[*?#]"と書けば、*・?・#のいずれか1文字にリテラルとして一致します。ファイル名に使えない禁止文字(\ / : * ? " < > |)を検出する処理で活用できます。

AI鬼管理山崎 AI鬼管理山崎
Excelから出力したファイル名に禁止文字が紛れ込んでいないかをLike演算子でチェックするマクロは、弊社でも定番の使い方です。エスケープの書き方さえ覚えれば、ワイルドカード記号を含むファイル名でも正確に検証できます。

06 Like vs InStr vs Replace vs RegExp 使い分け比較 「あいまいな判定はLike」を軸に、他の文字列関数との住み分けを整理

VBAには文字列を扱う方法が複数あります。それぞれ得意な処理が異なるため、「今やりたいこと」に応じて最適な手段を選ぶことが、読みやすく壊れにくいコードにつながります。

手段主な用途得意なこと苦手なこと
Like演算子パターン一致の判定(True/False)シンプルなワイルドカード条件を直感的に書ける複雑な条件(繰り返し回数指定・グループ化)
InStr関数部分一致の検索(位置の取得)「含まれているか」の高速判定、位置情報の取得パターンでの判定(先頭N文字が数字、等)
Replace関数固定文字列の置換決まった文字列を別の文字列に一括置換パターンに一致する箇所だけを狙った置換
RegExp(正規表現)複雑なパターンの検証・抽出・置換繰り返し・グループ化・後方参照などの高度な条件参照設定やCreateObjectの準備、記法の習得コスト

📚 用語解説

InStr関数:VBAの標準関数の1つ。InStr(検索対象の文字列, 検索する文字列)の形式で呼び出し、検索する文字列が最初に見つかった位置(見つからなければ0)を返す。「含まれているかどうか」だけを知りたい場合はLike演算子より高速に動作する。

📚 用語解説

RegExp(正規表現):文字列のパターンを記号(メタ文字)で表現する仕組み。VBAではCreateObject("VBScript.RegExp")で利用する。繰り返し回数の指定({n,m})やグループ化(())、選択(|)などLike演算子にはない高度な表現が可能な一方、記法の習得コストが高い。

判断の目安としては、「ワイルドカード1〜2個で書けるシンプルな条件ならLike演算子」「単純に含まれるかどうかだけならInStr」「複雑な条件分岐や繰り返しパターンが必要ならRegExp」という順で検討するとコードがシンプルに保てます。

🏆
VERDICT
使い分けが正解
優劣ではなく適材適所。シンプルなパターン一致はLike、複雑な条件はRegExpという住み分けが業務コードの可読性を保つ。
' 同じ「先頭一致」を3つの方法で書き比べる
Sub CompareMethods()
    Dim s As String
    s = "invoice_20260801.pdf"

    ' 方法1: Like演算子(最もシンプル)
    Debug.Print s Like "invoice_*"

    ' 方法2: InStr(先頭一致だけならLeftとの組み合わせが必要)
    Debug.Print Left(s, 8) = "invoice_"

    ' 方法3: RegExp(オーバースペック気味だが複雑な条件には強い)
    Dim re As Object
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "^invoice_"
    Debug.Print re.Test(s)
End Sub
代表菅澤 代表菅澤
「先頭一致・末尾一致・部分一致」レベルの判定にRegExpを持ち出すのは正直オーバースペックです。Like演算子はコードの見た目も読みやすいので、複雑な条件が本当に必要になるまではLike演算子で十分というのが現場の実感です。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 業務での実践活用パターン集 ファイル名フィルタ・データ検証・在庫コード判定への応用例

ここでは、Like演算子を業務マクロに組み込む際の具体的なユースケースを、コード例つきで紹介します。いずれも「ワイルドカードで条件を書けば1行で済む」典型パターンです。

7-1. フォルダ内のファイルを名前パターンで絞り込む

' フォルダ内の特定パターンのファイルだけをリストアップする
Sub ListMatchingFiles()
    Dim folderPath As String, fileName As String
    folderPath = "C:\Reports\"
    fileName = Dir(folderPath)

    Do While fileName <> ""
        ' "見積書_"で始まり、拡張子が.xlsxのファイルだけ処理
        If fileName Like "見積書_*.xlsx" Then
            Debug.Print fileName & " を処理対象に追加"
        End If
        fileName = Dir()
    Loop
End Sub

7-2. 入力データの形式チェック(バリデーション)

' セルの入力値が想定フォーマットかどうかをチェックする
Function IsValidProductCode(code As String) As Boolean
    ' 例: 商品コードは "英大文字1文字+数字4桁" の形式
    IsValidProductCode = code Like "[A-Z]####"
End Function

Sub ValidateSheetData()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim i As Long
    For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        If Not IsValidProductCode(ws.Cells(i, 1).Value) Then
            ws.Cells(i, 1).Interior.Color = RGB(255, 200, 200)  ' 不正データを赤色に
        End If
    Next i
End Sub

7-3. 複数条件をOrでつないだ仕分け処理

' 複数の部署コードパターンで案件を仕分ける
Sub ClassifyByDeptCode(deptCode As String)
    Select Case True
        Case deptCode Like "SL-*"
            Debug.Print "営業部の案件"
        Case deptCode Like "AC-*"
            Debug.Print "経理部の案件"
        Case deptCode Like "DV-*"
            Debug.Print "開発部の案件"
        Case Else
            Debug.Print "未分類"
    End Select
End Sub
✔️ファイル名フィルタ:Dir関数と組み合わせて特定パターンのファイルだけ処理
✔️入力データのバリデーション:セルの値が業務ルールに沿った形式かをチェック
✔️仕分け・振り分け:Select CaseとLikeを組み合わせて条件分岐を簡潔に書く
✔️メールアドレス・URLの簡易チェック:厳密でなくてよい場合はLikeで十分な精度が出せる
✔️在庫コード・型番の照合:桁数と文字種が決まっているコードの整合性チェック
⚠️ メールアドレス検証は簡易チェックにとどめる

Like演算子で"*@*.*"のようなパターンを書けば大まかなメールアドレス形式は判定できますが、厳密なRFC準拠のメールアドレス検証には向きません。業務上「明らかにおかしい入力を弾く」程度の用途にとどめ、正式な検証が必要な場合はRegExpや外部の検証サービスとの併用を検討してください。

AI鬼管理山崎 AI鬼管理山崎
Select Case True構文とLike演算子の組み合わせは、If文をネストさせるよりコードが読みやすくなるのでおすすめです。条件が増えてもCase行を追加するだけで済むため、後からルールが変わったときの保守性も上がります。

08 【独自データ】GENAI社内のVBA文字列処理業務の実態 Excel/VBAの手作業がどれだけの時間を食っているか

ここでは、弊社(株式会社GENAI)が実際にどの程度の業務時間をExcel/VBA周りの文字列処理・データ整形に費やしていたか、社内の実運用データをもとに紹介します。「Like演算子のようなワイルドカード判定を人力で書き続けること」自体が、実は見えにくいコストになっているケースが多くあります。

項目内容
利用プランClaude Max 20x(月額$200/約30,000円)
利用開始2025年後半〜
適用範囲経営・営業・広告・開発・経理・秘書業務・個人業務まで全社
文字列処理関連の主な用途Excel/VBAでのデータクレンジング、ファイル名判定、フォーマットチェックの自動化

弊社の経理・開発業務の中では、請求書チェックや経費仕訳のような「決まったパターンに沿っているかを確認する」作業が定常的に発生します。以前はこうした確認作業を、担当者が目視でチェックするか、都度Like演算子や関数を組んだVBAマクロを手で書いて対応していました。

業務領域主な用途概算削減時間(肌感ベース)
経理請求書チェック・経費仕訳・Freee連携月40h → 月5h
開発WordPress/HTML/LP制作、スクリプト書き捨て都度数時間削減
秘書業務日報生成・議事録・スケジュール調整日2h → 日15分
⚠️ 数値の注意書き

上記は弊社の肌感ベースの数値であり、業種・業態・担当者のスキルによって削減時間は変動します。「完全自動化」ではなく、人間のレビュー・微調整を伴う運用である点にもご留意ください。

特に経理領域では、請求書番号や取引先コードが「決まったフォーマットに沿っているか」をチェックする作業に、Like演算子的なパターン判定の考え方がそのまま活きています。ただし、実際の業務ではこうした「パターンを設計する」こと自体を都度エンジニアやマクロに詳しい担当者に頼む必要があった点が、これまでのボトルネックでした。

代表菅澤 代表菅澤
Like演算子そのものは決して難しい仕組みではありませんが、「このデータにはどのパターンを書けばいいか」を毎回考えて実装する時間は、地味に積み重なります。弊社では、そのパターン設計・コード化の部分をClaude Codeに任せることで、担当者が本来の判断業務に集中できる時間を増やしています。

09 【独自】非エンジニアがLike演算子でハマる3つの罠 つまずきやすいポイントとチェックリスト

Like演算子は書き方自体はシンプルですが、非エンジニアの方がVBAで自己流に使い始めると、共通してつまずくポイントがあります。ここでは代表的な3つの罠と、その回避方法を整理します。

9-1. 罠1:大文字小文字の判定が想定と違う

前述の通り、Like演算子は既定で大文字・小文字を区別する動作をします。「"abc" Like "ABC"」はFalseです。「なぜかヒットしない」と感じたら、まず大文字小文字の違いを疑うのが最初のチェックポイントです。

' 大文字小文字を無視したい場合
Sub CaseInsensitiveLike()
    ' 方法1: モジュール冒頭に Option Compare Text を宣言する
    ' (モジュール全体の比較モードが変わる点に注意)

    ' 方法2: UCase/LCaseで両辺を揃えてから比較する(局所的で安全)
    Dim s As String
    s = "Report_Final"
    Debug.Print UCase(s) Like UCase("report_*")   ' True
End Sub

9-2. 罠2:「?」と「*」の使い分けを誤る

「?」は必ず1文字、「*」は0文字以上という違いを混同すると、意図した以上に緩い(または厳しい)条件になってしまいます。特に「文字数が可変のデータに?を使ってしまう」ミスは頻出です。

やりたいこと誤りがちな書き方正しい書き方
先頭が"A"で始まる(文字数不問)"A?"(1文字しか許容されない)"A*"(0文字以上を許容)
ちょうど3文字の英字コード"***"(文字数を制限できていない)"???"(3文字ちょうどに固定)

9-3. 罠3:否定パターンを「全体否定」だと誤解する

4章で触れた通り、[!charlist]は1文字単位の否定です。「文字列全体にその文字を含まない」という条件だと誤解して使うと、意図しないデータを通過させてしまうバグにつながります。

想定と違う
判定結果

Trueのはずが
False(または逆)
比較モードを
確認

Option Compare
Text の有無
?と*の
使い分けを確認

文字数固定か
可変長か
否定パターンの
範囲を確認

1文字否定か
全体否定か
テストデータで
再検証

Debug.Printで
都度確認
✔️大文字小文字の区別:Option Compare Textの有無を確認したか
✔️?と*の使い分け:文字数が固定か可変かを整理したか
✔️否定パターン[!charlist]:1文字単位の否定であることを理解しているか
✔️エスケープ:ワイルドカード記号自体を検索したい箇所を[ ]で囲んだか
✔️テストケース:一致すべき例・一致すべきでない例の両方でDebug.Print確認をしたか
代表菅澤 代表菅澤
この3つの罠は、実際に弊社の導入支援先でも頻繁に見かけるパターンです。「動いたように見えるが、実は一部の例外データを見落としている」というのが一番怖いケースなので、テストデータを複数パターン用意して検証する習慣をつけることをおすすめします。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

10 Claude CodeにLike演算子のパターン設計を任せる ワイルドカードの組み立て・デバッグを日本語の指示だけで代行させる

ここまで見てきた通り、Like演算子自体はシンプルな仕組みですが、「自分のデータに対してどのパターンを書けば正しく判定できるか」を組み立てる作業には、地味に時間と試行錯誤がかかります。特に、9章で挙げたような「大文字小文字」「?と*の使い分け」「否定パターンの範囲」といった落とし穴を踏まずに一発で正しいパターンを書くのは、VBAに慣れていない人ほどハードルが高いのが実情です。

この「パターンを考えて、コードに落とし込み、テストする」という一連の作業は、Claude Codeのようなエージェント型AIツールに日本語でそのまま依頼できる領域です。サンプルデータと「こういう条件で判定したい」という要件を伝えるだけで、Like演算子を使ったVBAコードを組み立ててもらえます。

📚 用語解説

Claude Code:Anthropic社が提供するAIエージェントツール。チャット形式で「〇〇をやって」と指示するだけで、ファイルの内容を読み取り、コードの作成・修正・実行までを自律的に行う。ターミナル版だけでなく、ターミナル操作が不要なデスクトップ版も提供されており、非エンジニアでも日本語の指示だけで業務を任せられる。

' Claude Codeへの依頼イメージ(実際はチャットで日本語のまま指示するだけ)
' 依頼例:
' 「この商品コード一覧(A0001〜Z9999形式)から、
'   形式に合わないデータだけをハイライトするVBAマクロを書いて。
'   大文字小文字は区別しなくていいです」

' Claude Codeが生成するコード例(形式チェック+ハイライト)
Sub HighlightInvalidCodes()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim i As Long, lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        Dim code As String
        code = UCase(ws.Cells(i, 1).Value)  ' 大文字小文字を区別しない指定に対応
        If Not (code Like "[A-Z]####") Then
            ws.Cells(i, 1).Interior.Color = RGB(255, 200, 200)
        Else
            ws.Cells(i, 1).Interior.ColorIndex = xlNone
        End If
    Next i
    MsgBox "チェック完了:" & lastRow - 1 & "件を確認しました"
End Sub

この依頼の中で、大文字小文字を区別しない要件が「UCase関数で両辺を揃える」という具体的な実装に落とし込まれている点に注目してください。9章で触れたような落とし穴を踏まえたコードが、最初から出力されるのは、ゼロからパターンを組み立てる場合との大きな違いです。

やりたいことを
日本語で伝える

サンプルデータ+条件
Claude Codeが
コード生成

Like演算子/RegExp
を自動で使い分け
実際のデータで
動作確認

結果を見ながら
微調整を依頼
業務マクロとして
組み込み

継続的に利用

弊社では、こうした「決まった形式に沿っているかを確認する」類のVBA業務についても、パターン設計から実装、テストデータでの検証までをClaude Codeに任せる形で運用しています。8章で紹介した経理領域の削減事例も、こうした細かな文字列処理の自動化の積み重ねによるものです。

💡 まずは1つのチェック処理から試す

いきなり複数のマクロをまとめて任せようとせず、「このデータのこの列を、この条件でチェックしたい」という具体的な1つの処理から試すのがおすすめです。サンプルデータをそのまま貼り付けて依頼すると、抽象的な説明だけより精度の高いコードが得られます。

AI鬼管理山崎 AI鬼管理山崎
Like演算子のパターンを一つひとつ手で検証するより、「このリストの中で形式が違うものだけ教えて」と伝える方が速いケースは多いです。人がやるべきは「どんな条件で判定すべきか」を決める部分で、パターン文字列に落とし込む作業自体はAIに任せられる時代になってきています。

11 まとめ Like演算子の基本を押さえつつ、パターン設計の負担は仕組みで減らす

この記事では、VBAのLike演算子について、基本構文からワイルドカード4種類(* ? # [charlist])、否定パターン[!charlist]、エスケープ処理、他の文字列関数との使い分け、業務での実践パターンまでを整理しました。最後にポイントを振り返ります。

✔️Like演算子は「文字列 Like パターン」でTrue/Falseを返すパターン一致演算子
✔️* は0文字以上、? は必ず1文字、# は必ず数字1文字にマッチする
✔️[charlist]は文字リスト、範囲指定([A-Z]等)と個別指定を組み合わせられる
✔️[!charlist]は「1文字単位」の否定であり、文字列全体の否定ではない点に注意
✔️ワイルドカード記号自体を検索したい場合は角括弧[ ]で囲んでエスケープする
✔️既定は大文字小文字を区別するバイナリ比較。Option Compare Textで挙動が変わる
✔️シンプルな条件はLike、複雑な条件はRegExpという使い分けがコードを読みやすく保つ
✔️パターンの組み立てやデバッグの負担自体は、Claude Codeのようなツールに任せる選択肢もある

Like演算子は、正規表現ほど大掛かりな準備をしなくても、日常的な文字列パターンの判定を簡潔に書ける便利な機能です。一方で、大文字小文字の扱いや否定パターンの範囲など、細かい仕様を正確に理解していないと、気づかないうちにデータの見落としを生んでしまうこともあります。まずは本記事のコード例を実際に動かしながら、自分の業務データに当てはめて試してみてください。

代表菅澤 代表菅澤
Like演算子のようなVBAの基礎知識は、覚えておいて損はありません。ただ、実際の業務では「このパターンで合っているか」を都度検証する時間の方が長くなりがちです。そうした細かい検証・実装の手間を減らしたい方は、AI鬼管理まで気軽にご相談ください。

VBAのパターン設計・データ検証の自動化、Claude Codeで一緒に進めませんか

「このデータの形式チェックをVBAでやりたいが、どんなパターンを書けばいいかわからない」「既存のLike演算子まわりのコードを見直したい」——弊社AI鬼管理では、Claude Codeを使った業務VBA・Excel自動化の設計から導入までを支援しています。

AI鬼管理山崎 AI鬼管理山崎
サンプルデータを見せていただければ、その場でパターン設計のイメージをお伝えできます。まずは無料相談で、今かかっている確認作業の時間感覚をお聞かせください。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI鬼管理 — Claude Code導入支援トレーニング

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

AIBPO by AI鬼管理 — 定型業務の丸ごと代行

業務を丸ごと任せたい方へ

AIBPO by AI鬼管理

請求処理・データ入力・問い合わせ対応などの定型業務を、AI×人の品質管理体制で丸ごと代行。いまのコストの75%目安で、日々は成果物を承認するだけ。

よくある質問

Q. Like演算子とInStr関数、どちらを使うべきですか?

A. 「特定の文字列が含まれているかどうか」だけを知りたい場合はInStr関数の方がシンプルで高速です。「先頭が○○で始まる」「桁数が決まった数字の並び」のようなパターン条件を扱いたい場合はLike演算子が適しています。目的に応じて使い分けるのがポイントです。

Q. Like演算子は大文字・小文字を区別しますか?

A. 既定では区別します(バイナリ比較)。モジュールの先頭に"Option Compare Text"を宣言すると、大文字・小文字を区別しないテキスト比較に変わります。一時的に区別をなくしたいだけであれば、UCase関数やLCase関数で両辺を揃えてから比較する方法も使えます。

Q. ワイルドカードの「?」と「*」の違いは何ですか?

A. 「?」は必ず1文字に一致し、「*」は0文字以上の任意の長さに一致します。文字数が固定されているデータには「?」、文字数が可変のデータには「*」を使うのが基本です。混同すると意図しない範囲までマッチしてしまうので注意が必要です。

Q. 否定パターン[!charlist]で「文字列全体にその文字を含まない」ことを判定できますか?

A. できません。[!charlist]はあくまで「1文字」に対する否定です。文字列全体に特定の文字が含まれないことを判定したい場合は、[!charlist]をループで文字数分並べるか、InStr関数を使った判定に切り替える必要があります。

Q. アスタリスク(*)そのものを検索文字として使いたい場合はどうすればいいですか?

A. 角括弧で囲んで"[*]"と書くことで、ワイルドカードとしてではなく、リテラルな1文字の"*"として扱われます。同様に "?" は "[?]"、"#" は "[#]" と書くことでエスケープできます。

Q. Like演算子とRegExp(正規表現)は同時に使い分けてもいいですか?

A. 問題ありません。シンプルなパターン一致にはLike演算子、繰り返し回数の指定やグループ化が必要な複雑な条件にはRegExpという形で、処理内容ごとに使い分けるのが一般的です。1つのプロシージャ内で両方を使うことも珍しくありません。

Q. Like演算子のパターン設計をAIに任せることはできますか?

A. できます。Claude Codeのようなエージェント型AIツールであれば、サンプルデータと判定したい条件を日本語で伝えるだけで、Like演算子やRegExpを使ったVBAコードを生成してもらえます。大文字小文字の扱いなど細かい仕様も含めて考慮したコードが得られやすいのが利点です。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
※法人・事業用のメールアドレスでお願いします(Gmail等の個人用フリーメールは受付できません)
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年8月8日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。