VBA (Visual Basic for Applications) には、ネイティブな正規表現サポートはありませんが、Microsoft VBScript Regular Expressions オブジェクトを使うことで、正規表現を扱うことが可能です。以下の手順で正規表現を使った関数を作成できます。
参照の追加:
VBA Editor で、Tools
→ References
を選択し、Microsoft VBScript Regular Expressions 5.5
にチェックを入れてください。
コードの実装:
以下のコードを、任意のモジュールに追加してください。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
RegexReplace
関数
inputText
(文字列): 対象の文字列pattern
(文字列): 正規表現パターンreplaceText
(文字列): 置換後の文字列TestRegexReplace
サブプロシージャ
RegexReplace
関数を使ったサンプルです。pattern
で数値に一致する部分を [numbers]
に置換する例を示しています。Debug.Print
を MsgBox
などに変更すれば、GUI で結果を確認することも可能です。
正規表現で検索する関数も、VBScript Regular Expressions を利用して作成できます。RegexMatch
関数で指定したパターンが見つかるかどうかを確認し、見つかった場合はマッチした最初の値を返すようにします。
以下の手順で検索関数を作成できます。
参照の追加:
先ほどと同じく、VBA Editor で Tools
→ References
から Microsoft VBScript Regular Expressions 5.5
を選択します。
コードの実装:
以下のコードを任意のモジュールに追加してください。
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
RegexMatch
関数
inputText
(文字列): 検索対象の文字列pattern
(文字列): 正規表現パターン.Test
メソッドでパターンに一致するかどうかを確認し、見つかった場合は一致した値を返します。見つからない場合は空の文字列を返します。