VBAの標準機能では、正規表現によるマッチングができません。しかし、正規表現に似た働きをする演算子があります。それはLike演算子です。
なお「"のような"では困る。正規表現を使いたいんだ!」という方は「正規表現によるマッチング」をご覧ください。
Likeは演算子ですから、その他の比較演算子「=」や「<>」などと同じように使います。
Like演算子で使用できる記号は次の通りです。
記号 | 意味 | 使用例 | マッチする文字列 |
---|---|---|---|
? | 任意の1文字 | たな? | たなか、たなべ、たなし(など) |
* | 0個以上の任意の文字 | たか* | たかだ、たかなか、たかやなぎ(など) |
# | 1文字の数値(0~9) | ## | 01、26、95(など) |
[charlist] | charlistに指定した文字の中の1文字 | [A-F] | A、B、C、D、E、F |
[!charlist] | charlistに指定した文字の中に含まれない1文字 | [!A-F] | G 、H、I(など) |
一般的な正規表現に比べると使用できるメタキャラクタの種類は少ないですが、いくつも条件分岐を重ねるよりは効率的にパターンマッチングできるでしょう。いくつか使用例をご紹介します。
上のような住所録で「東京、横浜、千葉ではない住所を赤字」にするには、次のようにします。
Sub Sample1() Dim i As Long For i = 1 To 8 If Cells(i, 1).Value Like "[!東京,横浜,千葉]*" Then Cells(i, 1).Font.ColorIndex = 3 Next i End Sub
Like演算子を使わないなら、次のようになりますね。
Sub Sample2() Dim i As Long For i = 1 To 8 If Left(Cells(i, 1), 2) <> "東京" And _ Left(Cells(i, 1), 2) <> "横浜" And _ Left(Cells(i, 1), 2) <> "千葉" Then Cells(i, 1).Font.ColorIndex = 3 Next i End Sub
もう1つ。下のように日付が入力されているとします。
次のコードは、1月から6月までの日付だったらB列に○を挿入します。
Sub Sample3() Dim i As Long For i = 1 To 8 If Month(Cells(i, 1)) Like "[1-6]" Then Cells(i, 2) = "○" Next i End Sub
Like演算子を使わないのでしたら、次のようにSelect Caseステートメントでしょうか。
Sub Sample4() Dim i As Long For i = 1 To 8 Select Case Month(Cells(i, 1)) Case 1 To 6 Cells(i, 2) = "○" End Select Next i End Sub
最後に。下のように名前が入力されていたとします。この中から、タ行の名前だけをSheet2にコピーしてみましょう。
Sub Sample5() Dim i As Long, j As Long For i = 1 To 8 If Cells(i, 1).Phonetic.Text Like "[タ-ト]*" Then j = j + 1 Cells(i, 1).Copy Sheets("Sheet2").Cells(j, 1) End If Next i End Sub
あ、もちろん、セルのふりがな情報が正しく登録されてなくちゃダメですよ。他のソフトから文字列を貼り付けたら、ふりがなは設定されませんからね。もし、ふりがなを全角のカタカナ以外に設定していたら、StrConv関数などで変換してやりましょう。応用すれば、たくさんの名簿を五十音ごとのシートに割り振ることもできますね。