VBAで部分一致や完全一致を使う方法~Like ワイルドカード~

VBA

部分一致や完全一致を使いこなすために必須のワイルドカードの使い方を紹介していきます。

検索方法は文字列検索(変数に代入されたものもを含む)を想定して解説します。

完全一致でセルを判定

判定する表はこちらを使用

指定したセル内の値を完全一致で判定します

セルC3に”柴犬”と記載があったらメッセージボックス内の文字列を表示させます。

Sub test()
      If Cells(3, 3).Value = "柴犬" Then
          MsgBox "完全一致"
      End If
End Sub
※コードの見方
白・・・コード
紫・・・コメント
青・・・プロシージャの宣言
その他・・・コードを見やすくするために使うかも

この値の判定方法では指定した条件とセル内の文字列が完全に一致していない場合は何も処理が実行されません。

例えばセル内の文字列が”柴犬”ではなく”柴犬1”では条件に一致しないと判断されてFalseとなり、何も表示されることなく処理は終了します。

変数の値を完全一致で判定する

変数に格納した値を完全一致で判定するには下記のように記述します。

Sub test()
Dim dog As String
dog = "柴犬"
      If Cells(3, 3).Value Like dog Then
          MsgBox "完全一致"
      End If
End Sub

変数を利用しない文字列を判定するとき同様に変数をそのまま記述すればよいので特別な記述方法は必要ありません。

間違っても下記のようにダブルクォーテーションで変数を囲わないようにしましょう

If Cells(3, 3).Value Like "dog" Then

このような表記では文字列として”dog”を判定する記述となってしまいます。

【VBA】超初心者でも挫折しないExcelマクロの勉強法3選!おすすめの独学を紹介

Likeとワイルドカードについて

前述した完全一致と部分一致を判定しているコードを見比べてみます。

完全一致

If Cells(3, 3).Value = "柴犬" Then

部分一致

If Cells(3, 3).Value Like "*柴*" Then

二つのコードで異なる部分を赤字とします。

ワイルドカード(アスタリスク)を使用した否定文の書き方は下記を参照してください

Like演算子と=(イコール)の違い

完全一致では指定したセルと判定する文字列を=(イコール)でつなげていました

部分一致では指定したセルと判定する文字列を =(イコール) ではなくLikeでつなげる必要があります。

Like演算子はあいまいな判定をおこなう際の明示的な宣言のようなもので、後述する*(アスタリスク)をワイルドカードとして利用することができるようになります。

指定したセル内の値を部分一致で判定します

セルC3に”柴”という文字列が含まれていたらメッセージボックス内の文字列を表示させます。

Sub test()
      If Cells(3, 3).Value Like "*柴*" Then
          MsgBox "部分一致"
      End If
End Sub

部分一致を使用するにはLike*(アスタリスク)を利用する必要があります。

部分一致で文字列を指定する*(アスタリスク)

VBAではワイルドカードとして*(アスタリスク)を利用します。

If Cells(3, 3).Value Like "*柴*" Then

このコードでは”柴犬”ではなく、”*柴*”と記載しています。

こうすることで前後にどんな文字列があったとしても、セルの中に”柴”という文字が含まれている場合はTrueと判定されます。

また、*(アスタリスク)を使用する際には必ずLike演算子を記述する必要があります。

Like演算子を記述しないで*(アスタリスク)を利用すると文字列として認識されてしまい、ワイルドカードとしての機能を果たすことができなくなります。

Like演算子と*(アスタリスク)はセットで利用するようにしてくださいね。

部分一致を制御する

*(アスタリスク)は使用する場所によってあいまいにする部分を制御することができます。

前にのみ何かしらの文字列がある
”柴犬”という文字の前にのみ、何かしらの文字列があってもTrueとする場合には柴の前に *(アスタリスク) を付ける

 If Cells(3, 3).Value Like "*柴犬" Then 

例えば、

『私は柴犬』

などの文字列”柴犬”の前にのみ文字があるためTrueとなる。もし 『私は柴犬です』 となると後ろにも文字があるため不一致となりFalseになる。

後ろにのみ何かしらの文字列がある
”柴”という文字の後ろにのみ、何かしらの文字列があってもTrueとする場合には柴の後ろに *(アスタリスク) を付ける

If Cells(3, 3).Value Like "柴*" Then 

例えば、

『柴犬だよ!』

などの文字列は”柴”の後ろにのみ文字があるためTrueとなる。もし 『私は柴犬です』 となると前にも文字があるため不一致となりFalseになる。

前後に何かしらの文字列がある
”柴”という文字の前後に何かしらの文字列があってもTrueとする場合には、柴の前後を*(アスタリスク)で囲う

 If Cells(3, 3).Value Like "*柴*" Then 

例えば、

『あの柴犬かわいい!』

などの文字列から柴という文字が含まれているかを判定できる。

部分一致の条件に変数を利用する

部分一致の判定に変数を利用して文字列検索する方法について解説していきます

構文

Sub test()
Dim dog As String
dog = "柴"
      If Cells(3, 3).Value Like "*" & dog & "*" Then
          MsgBox "部分一致"
      End If
End Sub

変数dogを宣言して、文字列”柴”を格納します

条件判定にはこの変数dogを使用していきます。

変数を利用した条件式

 If Cells(3, 3).Value Like "*" & dog & "*" Then

変数を利用して部分一致の判定を行う場合にもワイルドカードを利用することができます。

通常の文字列を判定する場合との違いとしては、ワイルドカードのみをそれぞれダブルクォーテーションで囲ってあげます。

そのうえで&を利用して変数とワイルドカードを結合してあげます。

下記のような表記はNG

If Cells(3, 3).Value Like "*dog*" Then

“*dog*”このような表記では変数dogは文字列として判定されてしまうため注意が必要です

Point!

変数を使った部分一致の判定は下記に注意すること

  • × “*変数名*”
  • “*” & 変数名 & “*”

ワイルドカードとは

ワイルドカードとは特殊文字のことで決められた文字ではなく何かしらの文字を意味しています。

文字列検索などを行う際によく利用されますので理解しておきましょう

下記、三つのファイル名を例にしていきます。

詳細設計書1.xlsx
詳細設計書2.xlsx
詳細設計書3.xlsx

詳細設計書が3つに分かれていてこれらすべてを検索したいとします。

詳細設計書はそれぞれ数字で分割されているのでそのままファイル名だけで検索すると一つしかヒットしません。

検索:詳細設計書1.xlsx
一致: 詳細設計書1.xlsx

すべての詳細設計書を検索するには数字の部分をワイルドカードを意味する特殊文字*(アスタリスク)に変更して記述します。

そうすることで*(アスタリスク)は上記の1~3の番号すべてを意味する特殊文字になるので詳細設計書すべてを検索することができます。

検索:詳細設計書*.xlsx
一致: 詳細設計書1.xlsx、詳細設計書2.xlsx、詳細設計書3.xlsx

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