にゃあ

Excelの正規表現関数を作る

「エクセルで正規表現を使いたい。」

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

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

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 : 対象文字列。置換する文字列を割り当てます。セル番地可。


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

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

コメント&トラバ

トラックバックを送る

無関係なスパムのトラックバックを防止するため、リンク先で本サイト(suin.asia)への言及が確認されないトラックバックは破棄しています。

トラバURL : http://suin.asia/trackback/112

コメントを書く

お名前* URL
本文*
合い言葉* ←「lier41al」と入力して下さい。
* この記事の話題と関係ないコメントはどんな内容でも削除します。(移動できないので)

トラックバック

トラックバックがないのはさみしいにゃん…。

コメント

へろ(2010.11.01) #
最近のExcelは参照設定がいらなくなった(標準で参照設定されている)という事でしょうか?

少なくともExcel2000では参照設定しないとAs RegExpでエラーになります。
どのバージョンでも「Microsoft VBScript Regular Expressions x.x」への参照設定をするか、CreateObject等でレイトバインディングによるコード実装が必要になるのではないかと…
suin(2010.11.03) #
> へろさん

あまりVBAに詳しくないのでなんとも言えないです^^;
Excel2000ですか。VBAもバージョンによって動いたり動かなかったりするようですね…。私も2007用のVBAコードが2003で動かないという経験があります。

ちなみにこの記事で書いたコードは2007で動かしてました。

Author

Submenu

Recent Entries

XOOPS Cube Dev Ring

氷川 XOOPS Module 開発室

Recent Comments

Recent Trackbacks

facebookいいね