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オブジェクトと比べてどれを使うか迷ったときは、この記事の使い分けを参考に、目的に合った方法を選んでみてください。


コメント