Excel VBA > ツール・システム紹介 > VBAで正規表現が正しいか確認するプログラム
このエントリーをはてなブックマークに追加

VBAで正規表現が正しいか確認するプログラム

正規表現が正しく機能しているのか簡単に知りたい

VBAでは正規表現が使えますが、実際に使おうとしてうまくいかないとき、そもそも自分が作った正規表現自体が間違えていたりすることもしばしばあったりします。その一方で正規表現自体は正しかったのだけど、たまたまマッチしなかっただけもあり、その判別が困難で原因究明に時間がかかることがあります。

特に細かい指定をしたときになかなかマッチしないことが有ったりすると、その度にテストプログラムを作って試していました。
今回はそのテストプログラムの使い勝手を良くするために少し汎用的にしてみました。
(下の方にあるテスト表もざっくりですが、15分くらいで作成したのでざっくり参考程度にどうぞ)

Functionプロシージャでマッチ、アンマッチの判定する

ユーザフォームを作って云々・・・は、ちょっと面倒だったので、セルに対象となる文字列、それにマッチするかどうかの正規表現を入れ、その結果を返すようにしています。

‘——————————————————–
‘正規表現が正しくマッチするかを判定
‘——————————————————–
Function 正規表現テスト(対象セル As Range, 正規表現 As String) As String

    ‘変数:引数格納用
    Dim Rng As Range
    Dim strReg As String

    Set Rng = 対象セル
    strReg = 正規表現

    ‘変数:正規表現オブジェクト関連
    Dim reMatch As Object

    With CreateObject(“VBScript.RegExp”)
        .Pattern = strReg

        ‘大文字小文字を無視(区別する→False)
        .IgnoreCase = True

        ‘文章全体
        .Global = True

        Set reMatch = .Execute(Rng.Value)

        ‘マッチしていれば、1以上の値が返ってくる
        If reMatch.Count > 0 Then
            正規表現テスト = “マッチ(” & reMatch.Count & “個 最初にマッチした文字:” & reMatch(0).Value & “)”
        Else
            正規表現テスト = “マッチしません(アンマッチ)”
        End If

    End With

End Function

上記の「正規表現テスト」Functionプロシージャを下記画像のように組み込んで使用します。

(ちなみに上記のコメントの「変数:引数格納用」は日本語文字を入れると、変数入力のたびにIMEの切り替えが面倒だったのでこのようにしているだけです)

作った正規表現がマッチしているかどうかを判定

こうすることで正規表現を疑似的?に確認できます。実際にはマッチしたかどうかだけではもったいない?ので、このプロシージャでは各正規表現で最初にヒットした文字列も表示しました(本当は全部表示したかったのですが、マッチしたときにそのマッチ数が可変となり、ループしないといけなそうだったのでやめました。ただ、上記ではやっていませんが、最後にマッチした文字列も簡単に表示できそうです)。

空白の正規表現?

ざっくりテストした表を載せますが、その時たまたまですが、このプロシージャで「空白の正規表現」を判定すると「マッチ」になりました(表6行目)。最初の文字列が「0文字目」?と思われる点が正規表現の仕様として気になりました(実際の運用ではこういう使い方はなさそうですが)。

実際の作業で、より利便性良く使うという意味では、アドイン化してフォームなどを表示するなどもいいかもしれません。

カテゴリ:ツール・システム紹介