suin.io

Excelの正規表現関数を作る

suin2008年11月30日
「エクセルで正規表現を使いたい。」

そんな要望は意外と多いと思いますが、エクセルでは標準で正規表現の関数が用意されていないのです。そのため、ワークシート上で、ちょっとした正規表現が使えれば、用が足りてしまいそうな検索や置換といった処理が大変面倒になってしまいます。

エクセルでも、正規表現が使えたらいいのになあと思っていたら、自前の関数を定義してしまえば、エクセルでも正規表現が使えるということがわかりました。

Excel2007でのおもな手順は次のとおりです。

  1. 「開発」→「Visual Basic」をクリック
  2. ウインドウが出たら、「挿入」→「標準モジュール」
  3. 次のコードをそこにコピペする
    Function RegReplace(Regex, Replace, TargetText)

    Dim re As RegExp

    Set re = New RegExp
    re.Pattern = Regex
    RegReplace = re.Replace(TargetText, Replace)

    End Function


    Function RegMatch(Regex, TargetText)


    Dim re As RegExp

    Set re = New RegExp
    re.Pattern = Regex
    RegMatch = re.Test(TargetText)

    End Functio
  4. 最後に、ワークシートに戻り任意のセルに「=RegMatch()」「=RegReplace()」関数を入力する。

つづいて、関数の使い方を説明します。

RegMatch(Regex, TargetText)

引数1 Regex : 正規表現を記述します。
引数2 TargetText : 対象文字列。マッチするかどうかを調べたい文字列を割り当てます。もちろん、セル番地でもかまいません。
戻り値 Bool


RegReplace(Regex, Replace, TargetText)

引数1 Regex : 置換ルールを正規表現で記述します。
引数2 Replace : 置換後の文字列を記述します。$1なども使えます。
引数3 TargetText : 対象文字列。置換する文字列を割り当てます。セル番地可。


これでエクセルで、正規表現がつかえるようになったのではないかと思います。

注意しなければならないのが、エクセルでの正規表現は非常に重く、時間がかかるという点です。スペックの低いコンピュータでは、正規表現の処理にかなり時間がかかります。特に、エクセルはデフォルトで再計算を実行してしまうので、再計算を手動にするように設定を変更するなどして、工夫する必要があるかとおもいます。
RELATED POSTS