LoginSignup
12

More than 5 years have passed since last update.

Excel で正規表現を使えるようにする

Posted at

概要

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")

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12