TEXTBEFORE 関数 / TEXTAFTER 関数


ここで解説する TEXTBEFORE関数とTEXTAFTER関数 は、ProPlusに追加された関数です。Excel 2016/2019/2021では使用できませんのでご注意ください。また、本稿執筆時点(2022/3/20)では、まだInSider Programに実装されただけですので、製品版で使えるようになるには、まだ少し時間がかかると思います。なお、この関数については、YouTubeの動画でも解説しています。ぜひ、ご覧ください。

TEXTBEFORE関数 / TEXTAFTER関数

文字列(TEXT)のうち、指定した区切り文字から"前(BEFORE)"を抜き出すのがTEXTBEFORE関数で、"後ろ(AFTER)"を抜き出すのがTEXTAFTER関数です。

もちろん、区切り文字が「何文字目にあるか分からない」という状況ですね。これ、実務では、よくやる作業です。今までのExcelでしたら、FIND関数やSEARCH関数で区切り文字の位置を調べて、LEFT関数やMID関数などで抜き出していました。

この処理が、ひとつの関数だけでできるようになりました。ですが正直、今までだって複数の関数を組み合わせればできたし、別にそれで困ってなかったし、今さら「1発でできるよ~」って言われても、それほど感動はありません。まぁ実際には、最新版ということで、ちょっと便利な仕組みも搭載されているのですが、それは後述するとして、まずは引数を見てみましょう。

TEXTBEFORE(text,delimiter,instance_num,ignore_case)
TEXTAFTER(text,delimiter,instance_num,ignore_case)

まだ、搭載ホヤホヤの新参者ですから、引数も英語表記のままです。ちなみに、どちらも指定できる引数は同じです。正式版として実装されるときには、ちゃんと日本語の引数名に翻訳されるでしょうけど、ここでは、解説がしやすいように、私流に翻訳してみます。

TEXTBEFORE(元の文字列,区切り文字,区切り位置,大文字小文字の区別)
TEXTAFTER(元の文字列,区切り文字,区切り位置,大文字小文字の区別)

引数「元の文字列」には、抽出する前の文字列を指定します。セルに入力されていれば、そのセルを指定すればいいし、括弧内に直接"ABC-100"のように書いてもいいですし、別の関数を指定することもできます。2つめの引数「区切り文字」ですが、"-"や","などの記号だけでなく、単なる文字も指定できますし、それは複数文字でもOKです。

指定した「区切り文字」が存在しないとエラーになります。

3つめの引数「区切り位置」は、もし指定した区切り文字が、元の文字列内に複数存在していたとき、左から"何番目に登場した区切り文字"で区切るかを指定します。

引数「区切り位置」を省略すると、"1"を指定したものとみなされます。

最後の引数「大文字小文字の区別」は、引数「区切り文字」にアルファベットを指定したとき、大文字と小文字を区別するかを指定します。FALSEを指定すると、大文字と小文字を区別して、TRUEを指定すると区別しません。この引数を省略するとFALSEを指定したとみなされて、大文字と小文字は区別されます。

さて、上記で「ちょっと便利な仕組みも搭載されている」と書きましたが、引数「区切り文字」には、複数の文字や記号を同時に指定できます。下記は、区切り文字に"-"と"/"を指定しています。

複数の区切り文字を指定すると「(区切り文字は)○または×」とみなされます。上記でしたら、区切り文字は「"-"または"/"」ですから、どちらで区切られていても同じように抽出できます。複数の区切り文字を指定するときは、それらを配列形式で指定します。数式内に直接配列を記述するときは、上記のように中括弧{}で囲みます。こうして数式内に直接記述した配列形式の値を「配列リテラル」とか「配列定数」などと呼びます。リテラルとは聞き慣れない言葉かもしれませんが、プログラムコードの中に直接記述する値を指します。ザックリ言えば、今回のように文字や数値を中括弧{}で囲むと「これって、配列だよ」という意味になります。ちなみに、"tanaka"のようにダブルコーテーション("")で囲むものを文字列リテラル、#2022/3/20#を日付リテラルなどと呼びます。

以下は蛇足です。
これらの関数は、まだInSider Program(ベータ版)に搭載された未完成品です。確認したところ、現在ではまだ、日本語(いわゆる2バイト文字)には対応していません。元の文字列に日本語が含まれていると、正常に動作しません。

さらに、こんなことも起こります。

まぁ、まだベータ版ですから、こんなもんでしょう。XLOOKUP関数も、最初はこんな感じでした。正式に製品版として搭載される頃には、こうした不具合も解消されているはずです。