元IT技術者の悪あがき

20年以上の熟成と味わい😊

【お知らせ】当ブログはアフィリエイト広告を掲載しています。

【広告】

Excelにいつの間にか正規表現関数が追加されていた

【目次】


はじめに

Excel正規表現を使ってデータ抽出する場合、私の場合、これまではVBAVBScriptモジュールを読み込んでユーザー関数を自作していた。

'// 部分掲載
Set ObjectRegExp = CreateObject("VBScript.RegExp")

ObjectRegExp.IgnoreCase = False
ObjectRegExp.Global = True
ObjectRegExp.MultiLine = False

だが先日、ユーザー関数を改めて自作しようとExcelを使っていたところ、偶然「REGEX」(正規表現)で始まる関数を見つけた。

いつの間にか、正規表現による文字列検索や文字列置換が出来るようになっているではないか。

ネットを調べてみると、どうやら去年(2025年5月)以降、徐々に使えるようになったらしい。

参考までに「窓の杜」過去記事へのリンクを貼っておく。

forest.watch.impress.co.jp

正規表現が使えると嬉しいこと

これまで正規表現を使ったことがない方向けに、Excel正規表現が使えるようになると、何が嬉しいかを少し解説してみる。

ざっくり答えると、文字の抽出や置換の条件を、これまでよりも細かく制御できること。

ちなみに従来からある関数でも、文字の検索や置換は出来た。

例えば、とある気象観測データで、観測地点の名称が「川」で終わる地名を抽出する場合。ちなみに実用性云々(うんぬん)については、今回の本題ではないので割愛する。

なおサンプルデータの出典については、本ページ末尾の「補足:サンプルデータの出典について」を参照して欲しい。

話を戻し、従来の関数であれば、関数の重ね掛けで抽出出来る。

一応、関数で何をしているか解説すると、次の通り。

  1. SEARCH関数で「川(」を検索する。ちなみに右カッコは地点名末尾の目印として使用している。
  2. 検索文字列が見つかれば、先頭からの位置を数値で返してくれるが、検索文字列がない場合は関数エラーになる。
  3. ISERROR関数を使い、SEARCH関数のエラー有無でTRUE/FALSEの論理値を返す。
  4. NOT関数で論理値を逆転させ、検索文字列が見つかればTRUE、なければFALSEを返すようにして、フィルタ条件とする。

前職でデータ抽出によく使っていた手だったので、半分頭空っぽで関数を組んでいたが、いざ文章にすると、地味に面倒だった。

ちなみに正規表現関数で書くと次の通り。

正規表現のパターンを知らない人からすると、「^.+」とか顔文字にしか見えないかも知れない。

実際のところは(*^^)v…って邪魔。(誤変換で出てきたがあえて放置。前からだがMS-IMEアホすぎる…。)

改めて、実際のところは顔文字ではなく、「^」は文字列の先頭、「.+」は任意の文字が1文字以上続き、次いで全角の「川(」が見つかればTRUE、なければFALSEを返しているだけ。

関数1個で済んでしまった。

まあ単純なデータ抽出であれば、従来の関数でも正規表現関数でも、正直どちらでも良いと思う。

だが問題は、名称の末尾が「山」だけでなく「川」も含めたいといった具合に、複数条件が必要となった場合。

従来の関数であれば、列ごとに個別の条件を設定して、最後にOR関数で集約して、いずれかの値がTRUEであれば最終結果をTRUEといった具合で、データ抽出することになると思う。

対して正規表現であれば、列を増やさずとも、パターンの修正だけで事足りる。

サンプル画像の「地点」列を見てもらえれば、地点名の末尾が「川」もしくは「山」になっているのが分かるかと思う。

半角カギカッコ[]内に「山川」と書いているが、これは単語としての「山川」ではなく、正規表現で「山」または「川」のいずれか1文字を示している。

「谷」も条件に追加したい場合は、カギカッコ[]内に「山川谷」と記述するだけである。

といった具合で、Excelの標準関数で正規表現が使えるようになれば、これまでよりも手早く効率良く、データ抽出やデータ変換が出来るようになる。

(私が気付いた)正規表現関数について軽く解説

Excelで使えるようになった正規表現関数は、私が知りうる限りでは次の3つ。

1. REGEXTEST 関数

正規表現のパターンに一致するか否かを、TRUEまたはFALSEの論理値二択で返す関数。

使いどころとしては、先の画像で示した通り、フィルターの表示条件に使ったり、戻り値を利用した分岐処理など。

参考> https://support.microsoft.com/ja-jp/office/regextest-%E9%96%A2%E6%95%B0-7d38200b-5e5c-4196-b4e6-9bff73afbd31

2. REGEXREPLACE 関数

端的に言うと、正規表現による文字列置換。

ちなみに任意設定である4つ目の引数「occurrence(発生)」で「置き換えるパターンのインスタンスを指定」できるらしいが、何を言ってるか詳細は不明。

参考> https://support.microsoft.com/ja-jp/office/regexreplace-%E9%96%A2%E6%95%B0-9c030bb2-5e47-4efc-bad5-4582d7100897

3. REGEXEXTRACT 関数

正規表現のパターンに一致した文字列を取得する関数。パターンに複数一致した場合は文字列配列で返すことも可能とのこと。

ただVBScriptならまだしも、Excelのワークシート関数で配列を取得してどうしろと言うのか、私にはいまいち使いどころが分からない。

参考> https://support.microsoft.com/ja-jp/office/regexextract%E9%96%A2%E6%95%B0-4b96c140-9205-4b6e-9fbe-6aa9e783ff57

ところで、窓の杜の過去記事では「XLOOKUP」「XMATCH」にも対応予定とあったが、今回は残念ながら時間切れで未調査。申し訳ない。

正規表現に関する注意点

なお、正規表現自体は方言と言うか、環境によって使える抽出条件(パターン)が若干異なる場合がある。

このため、別の環境では使えたがExcel正規表現では使えなかったという可能性もあり得る。

MSのオンラインドキュメントを見ると、一応、PCRE (Perl Compatible Regular Expressions/Perl互換正規表現) 2 に準拠しているらしいので、詳細は別途検索してもらえればと思う。

最後に

完全ではなさそうだが、Excel正規表現関数を使えるのは、本当に助かる。とは言っても、IT技術者を辞めた私の人生で、今後どれくらい活用できるかは未知数だが。


補足:サンプルデータの出典について

本ページのサンプルデータについて、「最新の気象データ・1時間降水量」(気象庁)で公開されているCSVデータを一部抜粋して利用。

URL> https://www.data.jma.go.jp/stats/data/mdrr/docs/csv_dl_format_prenh.html