TEXTBEFORE / TEXTAFTER:特定の文字の前後を抽出
💡 やりたいこと
セル内の文字列から、特定の区切り文字(例:アンダーバー、ハイフン、スペースなど)の前または後ろの文字列だけを抜き出したい。
例: 「Excel_NoVBA」から「Excel」または「NoVBA」を取り出す
新関数での解決法:TEXTBEFORE / TEXTAFTER
Excel 2024 / Microsoft 365 などの対応環境で使える関数を使えば、極めてシンプルに記述できます。Excel 2021以前や更新されていない環境では、後述の旧式代替を使ってください。
前の文字を取り出したい(TEXTBEFORE)
=TEXTBEFORE(A2, "_")
意味:A2セルの文字のうち、「_」(アンダーバー)より前にある文字を取り出す。
後ろの文字を取り出したい(TEXTAFTER)
=TEXTAFTER(A2, "_")
意味:A2セルの文字のうち、「_」(アンダーバー)より後ろにある文字を取り出す。
旧バージョンでの代替法(2021以前)
従来は LEFT や RIGHT、MID 関数と 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で囲む必要あり |
📝 小技・注意点
TEXTBEFOREとTEXTAFTERは、第3引数で「後ろからN番目の区切り文字」を指定することも可能です(マイナス値を指定)。例:パス文字列(C:\aaa\bbb\ccc.txt)からファイル名だけを取り出すのに超便利です。- 複数の区切り文字のいずれかで分割したい場合は、第2引数に配列定数(例:
{"_", "-"})を渡すことができます。