Excelの数式で正規表現を使う


2011年 09月 11日

問題

VimとExcelを組み合わせて全く新しいSQLクエリーを生成する
でも述べたように、諸事情で Excel を使う機会はよくあるのですが、
その時に困るのが文字列処理です。

Excel は組み込みでCLEANTRIMUPPERPHONETICなどの豊富な関数が用意されているものの、
何故か正規表現を使った文字列比較や文字列置換は標準で関数が用意されていません。
単純な処理ならば組み込み関数を組み合わせてどうにかできるものの、
s/,+/,/gs/,$// ができたらなぁ……」
と思うことはしばしばあります。

どうにかして Excel の数式で正規表現を使うことはできないでしょうか。

解答

結論から言うと、デフォルトの状態では正規表現を使うことはできません。
しかし以下のステップを踏むことで正規表現が利用できます
(以下の例では Excel 2007 を使用しています)。

  1. [開発] > [Visual Basic]を開く。
  1. Visual BasicのIDEのようなものが起動しますので、そこで[ツール] > [参照設定]を開きます。
  1. ダイアログが表示されるので、そこから[Microsoft VBScript Regular Expression 5.5]にチェックを入れ、[OK]ボタンを押下します。
  1. Visual BasicのIDEのようなもので[挿入] > [標準モジュール]を開きます。
  1. いかにもコードを書いてくれと言わんばかりのウィンドウが開くので、そこに以下のコードを入力します。
    Function S(target As String, pattern As String, replacement As String, Optional g As Boolean = False, Optional ignoreCase As Boolean = False, Optional multiLine As Boolean = False) As String
        Dim r As New RegExp
        r.MultiLine = multiLine
        r.Global = g
        r.IgnoreCase = ignoreCase
        r.Pattern = pattern
        S = r.Replace(target, replacement)
    End Function
  1. Visual BasicのIDEのようなものを終了します。

これで Excel の数式に5で書いた関数が使えるようになります。
例えば =S("Foo", "o+", "X") のような感じです:

これでややこしい文字列処理が多い日も安心です。
やりましたね。