【VBA(Excelマクロ)】Likeの使い方をマスターしよう|ワイルドカードもわかりやすく解説

スポンサードリンク
VBA

Excelのマクロを学習する中で、他の人が作ったVBAコードを見ると、
「Like」という単語を見かけることがあるかと思います。

  • 「Like」っていったい何なの?
  • 「Like」を使ってできることを知りたい
  • 「Like」の使い方や書き方を知っておきたい

このような考えに至ったのではないでしょうか。
この記事を読むことで、下記のことがわかります。

  • VBAの「Like」について知れる
  • 「Like」の使い方・書き方を学べる
  • 「Like」を使う際の注意点がわかる

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします

スポンサードリンク

VBA(Excelマクロ)のLikeとは?

「Like」は、文字列が特定のパターンに一致するかどうかを判定するための演算子です。

解説画像

演算子と聞くと、「+」や「-」、「=」などが思い浮かぶかと思います。
Likeも演算子の一つで、一番近いものでは「<」や「>」でしょうか…。
「a < b」のように「a like b」みたいな使い方をすると思ってください。

例えば、「Utatane」という文字列があったとして、
「a」が含まれる(部分一致)のか
「U」から始まっている(前方一致)のか
などを判定することができます。

言葉で説明してもなかなか伝わらないと思いますので、使い方・書き方を見ながら学んでいきましょう。

スポンサードリンク

Like演算子の使い方・書き方

Likeの基本構文は以下のとおりとなります。

▼基本構文
"判定する文字列" Like "パターン"

▼使用例
"Utatane" like "*a*"

今回はUtatane(判定する文字列)にaが含まれるか(パターン)を判定したという例です。

「*」は何?

「a(パターン)」の両サイドにある「*」が気になった方も多いと思います。
これはワイルドカードといって、さまざまな文字に代替できる特殊文字です。
トランプでいうところのジョーカーみたいなものでしょうか。
例えば「*」の他にも「?」というワールドカードがあります。
これは、何でもいいので1文字分の代替となり、「?a?」と記述すれば、「1a9」でも「3aK」でも一致という判定になります。
「12aJ」や「Ua」は1文字ではないので一致扱いになりません。

▼よく使うワイルドカード

  • ?:何でもいいので1文字分の代替
  • *:何でもいいので0文字以上の代替
    (使用例:*a*、一致例:1a・aK1・aでもOK)
  • #:1桁の数字のみの代替
    (使用例:#a#、一致例:1a1、不一致例:1a・12a1)
  • []:指定した文字のいずれか1文字
    (使用例:[bc]a[de]、一致例:bae・cae、不一致例:bcad)
  • [!]:指定した文字以外の1文字
    (使用例:[!bc]a[!de]、一致例:tab・1a1、不一致例:bae・cae・1tab)

簡単な使い方

前提知識{マクロの基礎・作り方から実行まで
前提知識{「Debug.Print」で値を表示させる方法
前提知識{条件分岐(If)

早速使用例を見ていきましょう。

下記のVBAコードは、文字列「Utatane」の中に「a」が含まれているかどうかを判定したマクロです。
「Like」は条件分岐の「If」と併せて使われることが多いです。

Sub ライク()
    If "Utatane" Like "*a*" Then
        Debug.Print "「a」が含まれています"
    End If
End Sub

Like演算子で「a」が含まれるかを判定し、含まれる場合は条件分岐(If)にてイミディエイトウィンドウに表示しています。

If文を使っているので、「And」や「Or」で複数の条件を掛け合わせて判定することも可能です。

    If "Utatane" Like "*a*" and "*n*" Then ' 「a」と「n」がどちらも含まれるかを判定

少し高度な使い方

前提知識{変数の宣言や使い方

変数に代入された文字列を判定することもできます。
下記VBAコードを見てください。

Sub 変数ライク()
    Dim str As String
    str = "Utatane"
    If str Like "*a*" Then
        Debug.Print "「a」が含まれています"
    End If
End Sub

3行目で文字列を変数に代入し、4行目でその変数を判定しております。

結果は前項と同じです。
変数を使うことで、実践的な使用に近づきます。
次に、さらに実践的な応用例として、セルの値を取得して判定するコードを見ていきましょう。

実践的な応用例

前提知識{ループ処理(For)
前提知識{セルの背景色を変更(RGBの知識)

下記のVBAコードは、Excelのセルに書き込みされた値が、携帯電話番号の形式かどうかを判定するマクロです。

Sub 実践ライク()
    Dim i As Long
    For i = 2 To 100
        If Cells(i, 1).Value Like "0#0-####-####" Then
            Rows(i).Interior.Color = RGB(255, 255, 0)
        End If
    Next
End Sub

パターンに一致した場合は、セルの背景色を黄色に変更するようにしています。

スポンサードリンク

Like演算子を使う際の注意点

複雑な判定には向いていない

Likeは簡易的なパターンマッチに向いていますが、より複雑な判定(例:メールアドレスの形式チェック)をしたい場合は、VBAの正規表現(RegExp)オブジェクトを使うとよいでしょう。

大文字小文字は区別される

Likeでの判定は大文字・小文字が区別されます。

"Utatane" Like "*A*" ' 不一致

区別されたくない場合は、モジュールの先頭に下記コードを記述してください。

Option Compare Text

▼使用例

Option Compare Text

Sub ライク()
    If "Utatane" Like "*A*" Then
        Debug.Print "「a」が含まれています"
    End If
End Sub

または文字列を小文字や大文字に変換してから判定を行うという方法もあります。

    If LCase("Utatane") Like "*u*" Then
        Debug.Print "「u」が含まれています"
    End If
  • LCase:アルファベットの大文字を小文字に変換
  • UCase:アルファベットの小文字を大文字に変換
スポンサードリンク

いろいろな判定方法

時には○○から始まる前方一致や、○○で終わる後方一致を判定したいこともあるかと思いますので、
具体的な方法を紹介いたします。

前方一致

▼パターン
"文字*"

▼使用例
"Utatane" Like "U*"

パターンとして記述する文字の後ろのみに「*」を記述することで、前方一致を判定することが可能です。
今回の場合は、「U*」として、「U」から始まっているかを判定しています。

パターンを「Ut*」と2文字にすることで、「Ut」から始まる文字列に絞り込むこともできます。

後方一致

▼パターン
"*文字"

▼使用例
"Utatane" Like "*e"

前方一致とは逆で、文字の前のみに「*」を記述することで後方一致を判定できます。
今回は「e」で終わる文字列かどうかを判定しています。

パターンを「*ne」と2文字にすることで、「ne」で終わる文字列に絞り込むこともできます。

完全一致

▼パターン
"文字"

▼使用例
"Utatane" Like "Utatane"

ワイルドカードを使わなければ完全一致を判定できますが、「Like」ではなく「=」を使うのが一般的です。

スポンサードリンク

最後に

VBA(Excelマクロ)のLikeについて解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

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