2023年5月4日木曜日

Excel VBAで正規表現マッチを使ったカスタムワークシート関数の作成

はじめに

Excelの標準機能では、セル内のテキストに対して正規表現を使った一致判定を行う機能がありません。しかし、VBAを使って独自のワークシート関数を作成することで、正規表現を活用した柔軟なテキスト処理が可能になります。今回は、Excel VBAを使って正規表現マッチを使ったカスタムワークシート関数を作成する方法を解説します。

この関数で使える正規表現の例はこちら

正規表現マッチ関数の作成

以下の手順で正規表現マッチ関数を作成します。

1.Excelを開き、Alt + F11キーを押してVBAエディタを開く。
2.左上のメニューから挿入をクリックし、モジュールを選択して新しいモジュールを作成する。
3.作成したモジュールに以下のコードを貼り付ける。
Function RegexMatch(CellValue As String, Pattern As String) As Boolean
    Dim Regex As Object
    Set Regex = CreateObject("VBScript.RegExp")

    With Regex
        .Global = True
        .IgnoreCase = False
        .Pattern = Pattern
    End With

    RegexMatch = Regex.Test(CellValue)
End Function

このコードは、セル内のテキスト(CellValue)と正規表現パターン(Pattern)を引数に取り、正規表現が一致するかどうかを判断し、結果を真偽値(TrueまたはFalse)で返す関数です。

使用例

正規表現マッチ関数RegexMatchを使って、以下のような処理が可能です。

1.電話番号の形式が正しいかチェック
=RegexMatch(A1, "^\d{2,4}-\d{2,4}-\d{4}$")

ここで、A1セルに電話番号(例:03-1234-5678)が入力されていると仮定します。正規表現パターンでは、2〜4桁の数字、ハイフン、2〜4桁の数字、ハイフン、4桁の数字という形式を表します。

2.メールアドレスの形式が正しいかチェック
=RegexMatch(A2, "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")

A2セルにメールアドレス(例:test@example.com)が入力されていると仮定します。この正規表現パターンは、一般的なメールアドレスの形式をチェックします。

※この画像は、A列に電話番号とメールアドレスの正誤例、B列に正規表現文字列、C列に関数を入力して動作チェックしてみたところ。

注意事項

  • 正規表現のパターンは、場合によって複雑になります。正確なパターンを作成するには、正規表現に関する知識が必要です。
  • 関数の挙動を変更するには、VBAコード内の.Globalや.IgnoreCaseの設定を変更してください。.Globalは、マッチングを全体で行うかどうかを設定するもので、.IgnoreCaseは、大文字・小文字を無視するかどうかを設定するものです。

まとめ

Excel VBAを使って正規表現マッチ関数を作成することで、標準のテキスト関数ではできない高度なテキスト処理が可能になります。また、正規表現を使いこなせば、さまざまなデータ整形やバリデーションが簡単にできるようになります。

また今回はワークシート関数として使用するためのコードを紹介しましたがVBAでの正規表現の扱い方は当然ながらマクロとして処理をするときにも応用可能なので参考にしてみてください。

0 件のコメント:

ウェブサイトのURLにおけるトレイリングスラッシュの解釈と有無による動作の違い

インターネットが現代社会におけるコミュニケーションの基盤となっている今日、ウェブサイトのURLはビジネスや個人ブランディングにとって重要な役割を果たしています。URLは単にウェブページへの経路を示すだけでなく、SEO(検索エンジン最適化)においても重要な要素です。この記事では、U...