VBAのLike演算子で文字列のパターンマッチングを行う方法をわかりやすく解説

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

Likeの概要

パターンマッチング VBAの予約語

Like

概要 Like 演算子は、文字列が特定のパターンに一致するかを判定するために使用されます。ワイルドカード(*, ?, # など)を使用して、柔軟なマッチングが可能です。

わかりやすく説明 Like は、「この文字列はこのパターンに合ってる?」とチェックするためのものです。例えば、「abc123」が「abc*」と一致するかを調べることができます。

  • 文字列が特定のパターンに合致するかを判定する。
  • ワイルドカード(*, ?, # など)を利用できる。
  • 条件分岐(If 文など)と組み合わせて使用することが多い。
  • 大文字・小文字の区別はしない(Option Compare Binaryを使用しない限り)。

Likeの基本的な使い方

Like 演算子を使って、文字列が特定のパターンに一致するかを判定できます。

Sub CheckPattern()
    Dim text As String
    text = "Hello123"
    
    If text Like "Hello*" Then
        MsgBox "一致しました!", vbInformation, "結果"
    Else
        MsgBox "一致しません。", vbExclamation, "結果"
    End If
End Sub

解説:

  • Like "Hello*" は、「Hello」で始まるすべての文字列に一致します。
  • * は、0文字以上の任意の文字列を表します。
  • この場合、"Hello123""Hello*" に一致するため、メッセージボックスが表示されます。

Likeのワイルドカード

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

ワイルドカード 意味
* 0文字以上の任意の文字列 "abc*" → "abc123" に一致
? 任意の1文字 "a?c" → "abc" に一致
# 任意の1桁の数字 "Item#" → "Item5" に一致
[abc] 指定した文字のいずれか "[aeiou]" → "a" や "e" に一致
[!abc] 指定した文字以外 "[!xyz]" → "a" や "b" に一致
[A-Z] 指定した範囲内の文字 "[A-Z]" → "B" に一致

ワイルドカードを使った応用例

以下のコードは、文字列が「ABC」から始まり、数字が続く場合に一致するかを判定します。

Sub CheckAdvancedPattern()
    Dim text As String
    text = "ABC123"
    
    If text Like "ABC###" Then
        MsgBox "ABCの後に3桁の数字が続いています。", vbInformation, "結果"
    Else
        MsgBox "パターンに一致しません。", vbExclamation, "結果"
    End If
End Sub

解説:

  • "ABC###" は、「ABC」の後に3桁の数字が続くパターンを指定。
  • # は1桁の数字を意味するため、「ABC123」は一致します。

エラーを回避する方法

Like 演算子を使用する際に、型の不一致エラーを防ぐために、適切な型チェックを行うことが重要です。

Sub SafeLikeCheck()
    Dim text As Variant
    text = 12345 ' 数値として代入
    
    On Error Resume Next
    If CStr(text) Like "#####" Then
        MsgBox "5桁の数字です!", vbInformation, "結果"
    Else
        MsgBox "パターンに一致しません。", vbExclamation, "結果"
    End If
    
    If Err.Number <> 0 Then
        MsgBox "エラー発生: " & Err.Description, vbExclamation, "エラー"
        Err.Clear
    End If
End Sub

解説:

  • 数値型のデータを CStr() で文字列に変換。
  • エラーハンドリングを追加し、予期しないエラーが発生しても処理を継続。

Likeの注意事項

  • Like 演算子は大文字・小文字を区別しない: 標準では "ABC""abc" は同じと判定される。
  • 厳密な比較をする場合は Option Compare Binary を使用: Option Compare Binary を指定すると大文字・小文字が区別される。
  • 数値の比較には向かない: 数値の範囲チェックには適していないため、数値比較には >, < を使用する。

よくある質問

Q: Like はどんな場面で使いますか?
A: 文字列のパターンチェック(例:「abc*」で始まるかなど)や、特定のフォーマットを満たすかを判定する際に使用されます。
Q: Like で大文字・小文字を区別できますか?
A: 通常は区別されませんが、Option Compare Binary を指定すると区別されます。
Q: 数値の範囲チェックに使えますか?
A: いいえ。Like は数値の比較には適していません。数値の大小比較には >, < を使用してください。
Q: ワイルドカードの [! ] の使い方が分かりません。
A: [!abc] は「a, b, c 以外の文字に一致する」という意味です。

まとめ

  • Like 演算子は、文字列のパターンマッチングに使用する。
  • ワイルドカード(*, ?, # など)を使って柔軟な検索が可能。
  • 大文字・小文字の区別は通常行われない。
  • 数値の比較には向かないため、適切な比較方法を選ぶ。
  • エラーハンドリングを活用して予期しないエラーを回避する。