
【Excel新関数紹介】TEXTBEFORE/TEXTAFTERで時短(FIND,LEFT,MIDの代替)【Excelノウハウ】
前回TEXTSPLIT関数について説明しました。
同じタイミングで次のような新関数が登場し、
FINDの役割を補完または代替するようになっています
(Microsoftのサイト365,Excel2021バージョン)
TEXTBEFORE:指定文字の前の部分を取得
TEXTAFTER :指定文字の後の部分を取得
TEXTBEFORE or TEXTAFTER(対象,"検索文字)
FIND関数からの進化:TEXTBEFORE/TEXTAFTER関数
yamada@mail.com の@より前の文字を取り出すときは、どうすれば良いでしょうか?
従来、文字列の中から特定の文字(例:@)の位置を見つけたいときは FIND 関数を使っていました。
=FIND("@", A2)
これは「@が何文字目にあるか」を返してくれるだけです。
そして、@より前の文字を出すときは、=LEFT(A1,FIND("@", A1)-1)
(私は、一度に関数を書かずに式を小分けにすることが多いです)
ワケ分からなくなる位なら「小分け!」
小分けの例
B2セル =FIND("@", A2) @の桁数を探す 7
C2セル =LEFT(A2,B2-1) @より前の文字 yamada
D2セル =LEN(A2) 全体の文字数 15(yamada@mail.comで15文字)
F2セル =MID(A2,B2+1,D2-B2) mail.com
「小分け」については
第1章:Excelの考え方を理解する の
「関数は“分けて”書いたほうが見やすい」 をご参照ください
FIND関数は進化していません。
機能としては今も昔も「特定の文字の位置を探す」だけです。
FIND関数の進化の代わりとして使えるのが、TEXTBEFORE、TEXTAFTER関数です。
FINDでは「小分け」にして段階を分けていたものが1つの関数でできるようになります。
たとえば、メールアドレスの「名前の部分だけ」を取り出したいなら:=TEXTBEFORE(A1, "@")

これだけで済みます。FINDとLEFTを組み合わせていた時代から比べて、圧倒的にシンプルです。
■ TEXTSPLIT、TEXTBEFORE,TEXTAFTER関数ではできないこともある
TEXTSPLIT等は便利ですが、使える場面には限りがあります。
「明確な区切り文字がある場合」にだけ有効です。
しかし、実際の現場では次のような“あいまい”なデータに遭遇することも多いはずです:
「090-xxxx-xxxx」のような電話番号形式の文字列だけを取り出したい
「カンマでもスペースでも区切りとして扱いたい」
「英数字だけを抜き出したい」
「特定の文字列パターンに一致するものだけ処理したい」
こういった処理には、TEXTSPLITでは限界があります。
■ (次のステップ)そんなときに「正規表現(RegEx)」が活躍
ここで登場するのが、正規表現(せいきひょうげん)という考え方です。
これは、「こういう文字の並びを探したい」というルールを、記号やパターンで指定する方法です。
たとえば
\d{3}-\d{4}-\d{4} ⇒ 数字3桁-4桁-4桁(電話番号の形式)にマッチ
こうしたパターンを使えば、目視では難しい判断もExcelで自動処理できるようになります。
■ 正規表現はExcel関数では使えないが、VBA+生成AIで実現可能!
残念ながら、正規表現は現在のExcel関数には搭載されていません。
そのため、これを使いたい場合はVBA(マクロ)やPower Queryの活用が必要です。
ただし朗報です。
今ではChatGPTなどの生成AIを使えば、
「この形式の文字列だけ抜き出したい」と自然文で指示するだけで、正規表現を含むVBAコードを自動生成してくれます。
昔は「正規表現+VBA」は上級者向けの技でしたが、今では初心者でもAIの助けを借りて実行できる時代になっています。
来月以降にExcelVBA+生成AIの活用について説明していく予定ですが、
その中でも、この正規表現についてお話していきます。
(正規表現はゴチャゴチャしていて、私は、頭をひねりまくっても間違ったりで、すごく時間がかかりましたが、生成AIのおかげで、圧倒的に便利になりました。)