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
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点typoありました。
flg_ignorecase
flg_igonorecase
>keijiさん
タイプミス、ご指摘ありがとうございました。
修正いたしました。