Excel VBA 正規表現を活用したデータチェック①

Excel VBA

この記事では、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列)の形式が正しいか、チェックします。

excel 郵便番号

■プログラム例

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 郵便番号

まとめ

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

 

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