正規表現で置換する関数

VBA (Visual Basic for Applications) には、ネイティブな正規表現サポートはありませんが、Microsoft VBScript Regular Expressions オブジェクトを使うことで、正規表現を扱うことが可能です。以下の手順で正規表現を使った関数を作成できます。

手順

  1. 参照の追加:

    VBA Editor で、ToolsReferences を選択し、Microsoft VBScript Regular Expressions 5.5 にチェックを入れてください。

  2. コードの実装:

    以下のコードを、任意のモジュールに追加してください。RegexReplace 関数は、与えられた正規表現パターンで文字列の置換を行います。

Option Explicit

' 正規表現の置換関数
Public Function RegexReplace(ByVal inputText As String, ByVal pattern As String, ByVal replaceText As String) As String
    ' Microsoft VBScript Regular Expressions を使うためのオブジェクトを宣言
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")

    ' 正規表現のパターンとオプションを設定
    With regex
        .Pattern = pattern
        .Global = True
        .IgnoreCase = False
    End With

    ' 入力文字列を指定したパターンで置換
    RegexReplace = regex.Replace(inputText, replaceText)
End Function

' 使用例
Sub TestRegexReplace()
    Dim inputText As String
    Dim pattern As String
    Dim replaceText As String
    Dim result As String

    ' 入力データとパターン、置換文字列を設定
    inputText = "This is a test string with numbers: 12345 and special characters: @#%^&"
    pattern = "\\\\d+"
    replaceText = "[numbers]"

    ' 関数の結果を変数に格納
    result = RegexReplace(inputText, pattern, replaceText)

    ' 結果を表示
    Debug.Print "Input: " & inputText
    Debug.Print "Result: " & result
End Sub

コードの説明

  1. RegexReplace 関数
  2. TestRegexReplace サブプロシージャ

Debug.PrintMsgBox などに変更すれば、GUI で結果を確認することも可能です。

正規表現で検索する関数

正規表現で検索する関数も、VBScript Regular Expressions を利用して作成できます。RegexMatch 関数で指定したパターンが見つかるかどうかを確認し、見つかった場合はマッチした最初の値を返すようにします。

以下の手順で検索関数を作成できます。

手順

  1. 参照の追加:

    先ほどと同じく、VBA Editor で ToolsReferences から Microsoft VBScript Regular Expressions 5.5 を選択します。

  2. コードの実装:

    以下のコードを任意のモジュールに追加してください。

Option Explicit

' 正規表現でパターンに一致する最初の結果を返す関数
Public Function RegexMatch(ByVal inputText As String, ByVal pattern As String) As String
    ' Microsoft VBScript Regular Expressions を使うためのオブジェクトを宣言
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    Dim match As Object

    ' 正規表現のパターンとオプションを設定
    With regex
        .Pattern = pattern
        .Global = False ' 最初の一致のみを取得
        .IgnoreCase = False
    End With

    ' 入力テキストでパターンに一致するかどうかを確認
    If regex.Test(inputText) Then
        Set match = regex.Execute(inputText)(0) ' 最初の一致を取得
        RegexMatch = match.Value
    Else
        RegexMatch = "" ' 一致するものがない場合、空文字列を返す
    End If
End Function

' 使用例
Sub TestRegexMatch()
    Dim inputText As String
    Dim pattern As String
    Dim result As String

    ' 入力データとパターンを設定
    inputText = "This is a sample text with an email address: [email protected]."
    pattern = "\\\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Z|a-z]{2,}\\\\b"

    ' 関数の結果を変数に格納
    result = RegexMatch(inputText, pattern)

    ' 結果を表示
    If result <> "" Then
        Debug.Print "Matched: " & result
    Else
        Debug.Print "No match found."
    End If
End Sub

コードの説明

  1. RegexMatch 関数