TEXTBEFORE / TEXTAFTER:特定の文字の前後を抽出

💡 やりたいこと

セル内の文字列から、特定の区切り文字(例:アンダーバー、ハイフン、スペースなど)のまたは後ろの文字列だけを抜き出したい。

例: 「Excel_NoVBA」から「Excel」または「NoVBA」を取り出す

新関数での解決法:TEXTBEFORE / TEXTAFTER

Excel 2024 / Microsoft 365 などの対応環境で使える関数を使えば、極めてシンプルに記述できます。Excel 2021以前や更新されていない環境では、後述の旧式代替を使ってください。

前の文字を取り出したい(TEXTBEFORE)

=TEXTBEFORE(A2, "_")

意味:A2セルの文字のうち、「_」(アンダーバー)よりにある文字を取り出す。

後ろの文字を取り出したい(TEXTAFTER)

=TEXTAFTER(A2, "_")

意味:A2セルの文字のうち、「_」(アンダーバー)より後ろにある文字を取り出す。

旧バージョンでの代替法(2021以前)

従来は LEFTRIGHTMID 関数と FIND 関数を組み合わせていました。

前の文字を取り出したい(LEFT + FIND)

=LEFT(A2, FIND("_", A2) - 1)

弱点:もしA2に「_」が含まれていないと #VALUE! エラーになるため、IFERROR で囲む必要があります。

後ろの文字を取り出したい(REPLACE + FIND 等)

いくつか方法はありますが、REPLACEを使うのが比較的短いです。

=REPLACE(A2, 1, FIND("_", A2), "")

弱点:こちらもエラー処理が必要です。

比較まとめ

データテーブル
項目 TEXTBEFORE/AFTER (対応環境) LEFT+FIND (旧版)
数式の短さ とても短い 長い
直感性 見れば意味がわかる 関数を解読する必要あり
N番目の区切り指定 第3引数で簡単に指定可能(「2個目の_」など) FINDを入れ子にするか、SUBSTITUTEとFINDを組み合わせる等、超難解になる
エラー回避 第4引数で「見つからなかった場合」の動作を指定可能 IFERRORで囲む必要あり

📝 小技・注意点

  • TEXTBEFORETEXTAFTERは、第3引数で「後ろからN番目の区切り文字」を指定することも可能です(マイナス値を指定)。例:パス文字列(C:\aaa\bbb\ccc.txt)からファイル名だけを取り出すのに超便利です。
  • 複数の区切り文字のいずれかで分割したい場合は、第2引数に配列定数(例:{"_", "-"})を渡すことができます。

🔗 関連記事