Excelに新しいワークシート関数が3つ追加されました。本稿執筆時点(2024/5/24)では、まだInSider Programに実装されただけですので、製品版で使えるようになるには、もう少し時間がかかると思います。今回追加されたのは、REGEXTEST関数、REGEXEXTRACT関数、REGEXREPLACE関数の3つです。関数名からも分かるように、いずれも正規表現に関する関数です。
正規表現とは、検索や置換などで、検索する文字列を「パターン化して表す」手法です。たとえば、ある文章の中から「田中」または「田原」または「田崎」という3種類の文字列を探すとき、検索を3回繰り返すのではなく、これら3つの文字列を「"田"で始まる2文字の文字列」などのような"パターン"を指定することで、そのパターンに該当する文字列を探します。ExcelやWindowsに備わっているワイルドカード(*や?)を使った、いわゆる"あいまい検索"みたいなイメージですね。正規表現は、このワイルドカードよりも、はるかに詳細なパターンを指定できる、いわば「ワイルドカードの上位版」みたいな仕組みです。
ちなみに、正規表現は英語で「regular expression」と呼ばれることから、一般的に「Regex」と表されます。「Regex」の読み方は、人によってさまざまです。「りじぇっくす」と読む人もいますが、私は昔から「れぐいーえっくす」と読んでいます。MS-DOSの時代には「れぐいーえっくす」の方が多かった気がします。まぁ、好きに読んでください。
今回追加された関数は、次の3つです。
REGEXREPLACE関数の引数は、次のとおりです。
REGEXREPLACE(text, pattern, replacement, [occurrence], [case_sensitivity]) 日本語で表すと REGEXREPLACE(テキスト、パターン、置換、[出現]、[大文字と小文字の区別])
引数「テキスト」には、検索の元となる文字列や、その文字列が入力されているセルなどを指定します。引数「パターン」は、検索するパターンです。書き方は「REGEXTEST関数の解説」を参照してください。パターンに一致した文字列を、引数「置換」に指定した文字列に置換します。引数「出現」には、複数の文字列が見つかった場合、何番目に見つかった文字列を置換するかを指定します。省略可能です。詳しくは下記をご覧ください。最後の引数「大文字と小文字の区別」は省略可能です。アルファベットを検索するときに指定します。省略すると、アルファベットの大文字と小文字を区別して検索します。
パターンの書き方に関しては「REGEXTEST関数の解説」を参照してください。
まずは、簡単なやつから。
パターンに一致する文字列(ここでは、田で始まる2文字)を"鈴木"に置換しています。パターンに一致する文字列が存在しないと、REGEXREPLACE関数はエラーになりますので、何ならIFERROR関数を使ってください。
さて、3番目の引数「出現」ですが、指定したテキスト内で、もしパターンに一致した文字列が複数存在した場合、何番目の文字列を置換するかを指定します。
セルB2では、引数「出現」を指定していませんので、一致するすべての文字列が置換されます。セルB3では引数「出現」に2を指定したので、2番目に一致した文字列が置換されます。引数「出現」にマイナスの数を指定すると、最後に見つかった方からカウントします。上図では、右からカウントしているような感じです。
REGEXREPLACE 関数には、もうひとつ便利な仕組みが用意されています。それは、グループ化されたパターンを、置換文字列内で「$1,$2,$3…」として扱えるという仕組みです。たとえば、こんな感じです。
今回、新しく「正規表現系のワークシート関数」が追加されたわけですが。確かに、技術として見れば、なかなかおもしろいです。私も、秀丸エディタでは正規表現を普通に使っていますし、その利便性も理解しています。では、Excelユーザーにとって"嬉しい"のかと言えば、そんなことはないと思います。実務で、これら正規表現系の関数を使う人は、ほとんどいないと感じます。理由は2つあります。
1つめの理由は、とにかく正規表現は難しいということです。パターンの書き方は複雑ですし、自分がやりたいことを適切に記述するのって、ワイルドカード(*と?)に比べても、相当に難しいです。まぁ、それだけ複雑なことが実現可能なのですから、しかたありませんよね。そんな、東大王の"超~難問"レベルのパターンを、間違えずに記述する自信がありますか?もしかすると「ChatGPTに作ってもらえばいい」なんて考えていませんか?それが正しいという保証がありますか?Excelユーザーは"実務"を遂行するのが目的です。もし、間違った処理によって業務が滞ったり、何らかの損失が生じた場合、OpenAI社が補填してくれるんですか(笑)?「とりあえず動けばいい!」なんて安直な考えだと、誰も引き継げない"属人化マクロ"の二の舞になりますよ。気をつけてくださいね。
正規表現系の関数があまり使われないだろうという理由の2つめは、そもそも多くのExcelユーザーは、そんな複雑な処理をしていないからです。過去、6万人近いExcelユーザーと会ってきましたが、ほとんどの方が行っている作業は、もっと単純でシンプルです。提供されるデータを所定のセルに代入するだけだったり、関数にしても、使うのはSUMIFやVLOOKUPなど基本的なものばかりです。正規表現を使って複雑な置換が要求される業務なんて、ごくごく一部です。そもそもExcelではワイルドカードを使えます。正規表現なんて使わなくても、ワイルドカードの曖昧検索で十分というユーザーの方が、圧倒的に多数です。
もちろん、正規表現を否定するつもりはありません。超役立つ局面だって、きっと、ときどきあるでしょう。自分がコントロールできる、シンプルなパターンであっても、正規表現でなければできないこともあるでしょう。そんなときのために、持ちネタのひとつとして、できれば使えるようになってください。