Excelで正規表現による置換

Excelで正規表現を使った置換を行うためのユーザー定義関数を作ってみました。
引数の順番は言語によって異なりますが、Excel風にしました。
裏でVBScriptを使っていますので、正規表現はそれに準拠します。
ここでは正規表現そのものについては説明を省きます。

コード

Function reg_replace(str, reg_before, str_after, Optional flg_ignorecase = False, Optional flg_global = False)
    Set re = CreateObject("VBScript.RegExp")
    re.pattern = reg_before
    re.IgnoreCase = flg_ignorecase
    re.Global = flg_global
    reg_replace = re.Replace(str, str_after)
End Function

説明

  • str
    文字列全体を指定します。
  • reg_before
    置換前を正規表現で指定します。正規表現は文字列として指定します。JavaScriptのように「/」で挟む必要はありません。
  • str_after
    置換後の文字列を指定します。
    VBScriptに準拠するので「$1」などを使うこともできます。
  • flg_ignorecase
    大文字小文字の区別を無視するかを指定します。正規表現の「i」に相当します。「True」とすると大文字と小文字の区別を無視します。
    省略可能です。デフォルトは「False」です。
  • flg_global
    複数箇所を対象とするかを指定します。正規表現の「g」に相当します。「True」とすると該当する全ての箇所を対象とします。
    省略可能です。デフォルトは「False」です。

使い方

「abc-def」や「abc-xyz」の「-」以降を削除するときには次のようにします。
=reg_replace(“abc-def”,”-.*”,””)
2番目の引数は置換前文字列で正規表現で指定します。
これに該当した部分が3番目の引数の置換後文字列に置き換えられます。これを空文字列にすれば削除されます。

「abc-def」や「abc-xyz」の「-」の前後を入れ替えるときには次のようにします。
=reg_replace(“abc-def”,”(.*)-(.*)”,”$2-$1″)
「$1」「$2」は正規表現の括弧の順番に対応します。

コメント

  1. keiji より:

    利用させていただきます。
    1点typoありました。
    flg_ignorecase
    flg_igonorecase

  2. stabucky より:

    >keijiさん
    タイプミス、ご指摘ありがとうございました。
    修正いたしました。

タイトルとURLをコピーしました