概要
Excel の関数や、VBA の中で正規表現を使いたいと思うことは多いと思います。
下記のようにすると使えるようになりますよ。
VBA の画面から下記のモジュールを追加します。
Option Explicit
'正規表現で一括置き換え
Public Function RegExpReplace(SrcStr As String, RegStr As String, RepStr As String) As String
RegExpReplace = GetRegExp(RegStr:=RegStr, IgnoreCase:=False, IsGlobal:=True).Replace(SrcStr, RepStr)
End Function
'正規表現で検索
Public Function RegExpMatch(SrcStr As String, RegStr As String) As Boolean
RegExpMatch = GetRegExp(RegStr:=RegStr, IgnoreCase:=False, IsGlobal:=False).Test(SrcStr)
End Function
'正規表現オブジェクト取得
Private Function GetRegExp(RegStr As String, Optional IgnoreCase As Boolean = False, Optional IsGlobal As Boolean = True) As Variant
Dim Reg
Set Reg = CreateObject("VBScript.RegExp")
Reg.Pattern = RegStr '正規表現文字列
Reg.IgnoreCase = IgnoreCase '大文字と小文字を区別しないか
Reg.Global = IsGlobal '文字列全体を検索
Set GetRegExp = Reg
End Function
やることは、これだけです。
ただし、 xlsx じゃなくて、xlsm (マクロ含む形式)で保存しないといけませんけどね。
使い方(関数として使う場合)
たとえば、下記のようにすれば A1 の文字列中に含まれる数字が [] で囲まれることになります。
=RegExpReplace(A1, "(\d+)", "[$1]")
下記のようにすれば A1 の文字列中に数字が含まれるかどうかを TRUE / FALSE で返すようになります。
=RegExpMatch(A1, "\d")
使い方(VBAとして使う場合)
関数と同様に下記のように使えます。
strReplaced = RegExpReplace(strTarget, "(\d+)", "[$1]")
boolMatched = RegExpMatch(strTarget, "\d")