この記事では、Excel VBAで正規表現を利用してデータをチェックする方法について説明します。
正規表現とは?
正規表現は、文字列のパターンを表現するための表記法です。
特定の文字列が、あるパターンに一致するかどうかを検証するために使用されます。
RegExpオブジェクト
VBAで正規表現を使って文字列を操作するためには、VBScriptのRegExpオブジェクトを使用します。
RegExpプロパティ
プロパティ | 説明 |
Pattern | 検索で使用する正規表現のパターンを設定します。 |
IgnoreCase | 大文字と小文字を区別する場合はFalse(既値)、区別しない場合はTrueを設定します。 |
Global | 文字列全体について検索するか、最初の一致を検索するのかを設定します。 False(既定値)を指定した場合、最初に一致する文字列だけが検索されます。 Trueを指定した場合、文字列全体が検索されます。 |
RegExpメソッド
メソッド | 説明 |
Test | 正規表現によるマッチングを行い、パターンと一致した場合はTrue、一致しない場合はFalseを返します。 |
Replace | 正規表現によるマッチングを行い、マッチした場合はそのマッチ部分を置換文字列と置換します。 |
Execute | 指定した文字列に対して正規表現による検索を実行します。検索する文字列はPatternプロパティで設定しておきます。 |
正規表現のパターン
正規表現で使用できる主なパターンは以下のとおりです。
文字 | 説明 |
\ | この文字の次に続く文字は特別な文字またはリテラルです。 例えば「\n」は改行文字、「\\」は「¥」、「\(」は「(」と一致します。 |
^ | 入力の開始と一致します。 |
$ | 入力の終端と一致します。 |
* | 直前の文字と0回以上一致します。 例えば、「b*l」は「bl」とも「bowl」とも一致します。 |
+ | 直前の文字と1回以上一致します。 例えば、[bo+l」は「bowl」とは一致しますが、「bl」とは一致しません。 |
? | 直前の文字と0回または1回一致します。 |
. | 改行文字以外の任意の1文字と一致します。 |
{n} | 直前の文字の桁数を指定します。 |
{n,} | 直前の文字の最小桁数のみ指定します。 |
{n,m} | 直前の文字の最小桁数と最大桁数を指定します。 |
[] | 角括弧に含まれるいずれか1文字に一致します。 |
郵便番号のチェック例
郵便番号(C列)の形式が正しいか、チェックします。

■プログラム例
Sub Sample01() Dim objCheck As Object '郵便番号をチェックするための変数 Dim i As Long '繰り返し処理用の変数 '郵便番号チェック用オブジェクト作成 Set objCheck = CreateObject("VBScript.RegExp") '郵便番号のパターン objCheck.Pattern = "^[0-9]{3}-[0-9]{4}" '郵便番号列をチェックする 'A1列の行数を数えて、2行目からA列の行数分繰り返す '郵便番号列は空のセルがあるため、A列で判定 For i = 2 To Range("A1").CurrentRegion.Rows.Count '郵便番号のパターンではない場合 If objCheck.Test(Cells(i, 3).Value) = False Then '対象の郵便番号セルの背景色を赤にする。 Cells(i, 3).Interior.ColorIndex = 3 End If Next End Sub
郵便番号のパターンは「数字3桁」「-」「数字4桁」で入力されているとします。
パターン「^[0-9]{3}-[0-9]{4}」の「^」は先頭文字、「[0-9]{3}」は0-9の数字3桁、「-」は「-」(ハイフン)、「[0-9]{4}」は0-9の数字4桁という意味になります。
このパターンに合っているかどうかは、「If objCheck.Test(Cells(i, 3).Value) = False Then」でチェックしています。
パターンに合わない(False)の場合は、セルに赤色を付けています。
■実行結果

まとめ
Excel VBAで正規表現を利用してデータをチェックする方法について、郵便番号を例に説明しました。