「メールアドレスから @ より前のユーザー名だけを取り出したい」「フルネームの苗字部分だけを抜き出したい」――こうした文字列操作の場面で、従来は LEFT 関数と FIND 関数を組み合わせる必要がありました。
数式を1つ書くたびに区切り文字の位置を計算する手間が発生し、可読性も落ちます。文字列が複雑になるほど数式は長くなり、メンテナンスのたびに頭を悩ませることになります。
そこで活躍するのが TEXTBEFORE関数 です。指定した区切り文字よりも前の文字列を、わずか1つの数式で取り出せます。この記事では、TEXTBEFORE関数の基本から実務応用まで、コピペで使える数式とともに解説します。対応バージョンは Excel 2021 と Microsoft 365 です。
ExcelのTEXTBEFORE関数とは?読み方と何ができるか
TEXTBEFORE関数は、Excel 2021 および Microsoft 365 で追加された文字列操作関数です。指定した区切り文字より前の部分を、シンプルな1行の数式で抽出できます。
読み方と語源
「テキスト ビフォア」と読みます。英単語の TEXT(テキスト)+ BEFORE(〜より前) が語源です。まさに「指定した文字よりも前のテキスト部分を取り出す」関数です。
姉妹関数として TEXTAFTER 関数(「テキスト アフター」、区切り文字より後ろを抽出)と TEXTSPLIT 関数(「テキスト スプリット」、複数セルに分割展開)があります。3つセットで覚えると文字列操作の幅が広がります。
TEXTBEFORE関数でできること
TEXTBEFORE関数を使うと、次のような処理が1つの数式で完結します。
- メールアドレスの「@」より前のユーザー名を取り出す
- 「苗字 名前」形式のフルネームから苗字だけを抽出する
- ファイルパスの最後の「」より前のフォルダパスを取り出す
- 区切り文字が複数ある場合に「N番目より前」を柔軟に指定する
- 区切り文字が見つからない場合のエラー処理を引数で指定する
LEFT 関数と FIND 関数の組み合わせで書いていた長い数式が、TEXTBEFORE 一本でスッキリ書き換えられます。これが最大の魅力です。
対応バージョン
TEXTBEFORE関数が使えるのは以下の環境です。
| 環境 | 対応可否 |
|---|---|
| Microsoft 365(Windows / Mac / Web) | 利用可能 |
| Excel 2021 | 利用可能 |
| Excel 2019 以前(2016 / 2013 など) | 利用不可 |
Excel 2019 以前では #NAME? エラーになります。組織内で共有するファイルでは、利用環境を確認しておきましょう。
TEXTBEFORE関数の書式と引数の渡し方
TEXTBEFORE関数は引数が多めですが、必須は2つだけです。残りはオプションなので、基本的な使い方ではあまり意識する必要はありません。
基本構文
=TEXTBEFORE(文字列, 区切り記号, [インスタンス], [一致モード], [検索方法], [見つからない場合])
最小構成では次のようにシンプルに書けます。
=TEXTBEFORE(A1, "@")
引数の詳細解説
各引数の意味を表にまとめます。
| 引数 | 必須/任意 | 内容 | 既定値 |
|---|---|---|---|
| 文字列 | 必須 | 抽出対象となる文字列、またはセル参照 | — |
| 区切り記号 | 必須 | この文字よりも「前」を抽出する目印となる文字 | — |
| インスタンス | 任意 | 区切り記号が複数ある場合に何番目を基準にするか | 1 |
| 一致モード | 任意 | 大文字・小文字を区別するか(0=区別する/1=区別しない) | 0 |
| 検索方法 | 任意 | 末尾から検索するか(0=先頭から/1=末尾から) | 0 |
| 見つからない場合 | 任意 | 区切り記号がない場合に返す値 | #N/A |
覚えておきたいのは、インスタンスに負の値を指定すると末尾から数える という挙動です。例えば -1 なら「末尾から1番目の区切り記号より前」を意味します。
引数を渡す順番のコツ
任意の引数は左から順に指定する必要があります。途中をスキップしたい場合は、間の引数も明示的に既定値で書いておきます。
=TEXTBEFORE(A1, "@", 1, 0, 0, "該当なし")
「見つからない場合」だけを指定したい場合でも、インスタンス・一致モード・検索方法をそれぞれ既定値で埋めてから渡します。
TEXTBEFORE関数の使い方①|基本的な前文字列の抽出
最もシンプルな使い方から始めましょう。区切り文字を1つ指定するだけで、その手前までの文字列が返ってきます。
例1:メールアドレスからユーザー名を抽出する
A1セルに tanaka@example.com というメールアドレスがあるとします。
=TEXTBEFORE(A1, "@")
結果は tanaka です。「@」より前のユーザー名部分だけがシンプルに取り出せます。
従来は =LEFT(A1, FIND("@", A1) - 1) のように書く必要がありました。TEXTBEFORE のほうが意図が明確で、数式の読み手にも親切です。LEFT 関数の使い方は ExcelのLEFT関数の使い方 も参考にしてください。
例2:フルネームから苗字を抽出する
A1セルに 田中 太郎(半角スペース区切り)が入っているケースです。
=TEXTBEFORE(A1, " ")
結果は 田中 となり、苗字だけがきれいに取り出せます。全角スペース区切りの場合は、第2引数を " "(全角スペース)に置き換えて使います。
例3:商品コードから種別記号を抽出する
商品コード ABC-001-JP から先頭の種別記号 ABC だけを取り出します。
=TEXTBEFORE(A1, "-")
結果は ABC です。複数のハイフンがあっても、デフォルトでは最初に見つかったハイフンを基準に動作します。
例4:URLからパス部分を取得する
https://mashukabu.com/excel-function-howto-use-textbefore/ のような長いURLから、ドメインまでの部分を取り出したい場合です。
=TEXTBEFORE(A1, "/", 3)
「3番目の / より前」を指定することで、https://mashukabu.com が取り出せます。URLの構造(https:// のスラッシュ2つ+ホスト名後のスラッシュ)を考えると、3番目を指定するのが自然です。
TEXTBEFORE関数の使い方②|インスタンス指定・後ろから数える
区切り記号が文字列内に複数登場する場合、第3引数 インスタンス で「何番目を基準にするか」を細かく制御できます。これが TEXTBEFORE の真価を発揮する場面です。
複数の区切り文字がある場合のインスタンス指定
A1セルに 田中,太郎,male,22 というCSV形式のデータがあるとします。
=TEXTBEFORE(A1, ",") → "田中"(既定:1番目のカンマより前)
=TEXTBEFORE(A1, ",", 2) → "田中,太郎"(2番目のカンマより前)
=TEXTBEFORE(A1, ",", 3) → "田中,太郎,male"(3番目のカンマより前)
インスタンス番号を変えるだけで、抽出する範囲を柔軟に切り替えられます。
負の値で末尾から数える
インスタンスに 負の値 を指定すると、文字列の末尾から数えた位置になります。
=TEXTBEFORE(A1, ",", -1) → "田中,太郎,male"(末尾から1番目のカンマより前)
=TEXTBEFORE(A1, ",", -2) → "田中,太郎"(末尾から2番目のカンマより前)
「最後の区切り文字以降を捨てたい」というケースで重宝します。例えばファイル名から拡張子を取り除く場合に有効です。
末尾から数える実用例:拡張子を除いたファイル名を取得
A1セルに report.final.xlsx というファイル名があるとします。ピリオドが複数含まれていても、末尾の拡張子だけを除去できます。
=TEXTBEFORE(A1, ".", -1)
結果は report.final です。=TEXTBEFORE(A1, ".") だと最初のピリオドで切れて report になります。拡張子を除く目的では -1 指定が正解です。
一致モードで大文字・小文字を無視する
第4引数 一致モード に 1 を指定すると、英字の大文字・小文字を区別しません。
=TEXTBEFORE("Hello World", "world", 1, 1)
world(小文字)を指定していますが、一致モード 1 のおかげで World(大文字始まり)にもマッチします。結果は Hello (末尾に半角スペースあり)が返ります。英語データでケース揺れがあるときに安定して動作させたい場面で使えます。
TEXTBEFORE関数の使い方③|エラー処理と「見つからない場合」の引数
データの中に区切り記号が含まれない行が混じっていると、TEXTBEFOREはデフォルトで #N/A エラーを返します。実務ではエラー表示のままだと見栄えが悪いため、第6引数で別の値に差し替えるのが定石です。
「見つからない場合」引数で代替値を返す
A1〜A5 にメールアドレスが入っているデータの中に、空白や unknown のような不正値が混ざっているケースを想定します。
=TEXTBEFORE(A1, "@", 1, 0, 0, "該当なし")
「@」を含まないセルでは 該当なし と表示されます。#N/A のエラー羅列を避けられます。
IFERROR より「見つからない場合」を使うべき理由
従来は次のように IFERROR で囲んでエラーを処理していました。
=IFERROR(TEXTBEFORE(A1, "@"), "該当なし")
これでも動作はしますが、次のデメリットがあります。
- 数式が長くなり可読性が下がる
- TEXTBEFORE が返す他のエラー(
#VALUE!など)まで一律に握りつぶしてしまう - 数式評価が二重になりわずかにパフォーマンスが落ちる
第6引数の「見つからない場合」を使えば、「区切り記号が見つからないとき限定」 の処理になります。意図が明確で安全です。
末尾から検索する検索方法引数
第5引数 検索方法 に 1 を指定すると、区切り記号を末尾から探します。
=TEXTBEFORE("a-b-c-d", "-", 1, 0, 1)
末尾から最初に見つかったハイフン(c と d の間)より前、つまり a-b-c が返ります。インスタンスを -1 にする方法でも同じ結果が得られます。こちらの書き方も覚えておくと選択肢が広がります。
TEXTBEFORE関数の応用|実務での活用例(メール・パス・氏名分割)
ここからは、実務で遭遇しやすい7つのシーンを、コピペで動く数式とともに紹介します。
活用例1:メールアドレスのユーザー名一覧を作る
社内メールリスト(A列)から、ユーザー名だけを抽出する一括処理です。
=TEXTBEFORE(A2, "@")
数式を下方向にコピーするだけで、全アドレスのユーザー名が並びます。Microsoft 365 環境であれば、=TEXTBEFORE(A2:A100, "@") のように範囲指定でスピル(自動展開)させることもできます。
活用例2:氏名から苗字・名前を分割する
A1セルに 田中 太郎、隣のB1に名前を出したい場合の組み合わせです。
B1: =TEXTBEFORE(A1, " ") → "田中"
C1: =TEXTAFTER(A1, " ") → "太郎"
TEXTAFTER と組み合わせると、2つの数式でフルネームの分割が完了します。詳しくは ExcelのTEXTAFTER関数の使い方 を参照してください。
活用例3:ファイルパスからフォルダ部分を抽出する
A1セルに C:UserstanakaDocumentsreport.xlsx のようなフルパスがある場合です。
=TEXTBEFORE(A1, "", -1)
結果は C:UserstanakaDocuments です。ファイル名を除いたフォルダパスを取り出せます。別のシステムにフォルダ情報だけ渡したいときに便利です。
活用例4:URLからホスト名(ドメイン)を抽出する
A1セルに https://mashukabu.com/excel-function-howto-use-textbefore/ がある場合です。
=TEXTBEFORE(TEXTAFTER(A1, "//"), "/")
TEXTAFTER で // の後ろを取り出し、その結果から TEXTBEFORE で / の前を抽出します。結果は mashukabu.com になり、ホスト名だけがきれいに取れます。
活用例5:商品コードから種別+年式を取り出す
A1セルに ABC-2024-001-JP のような複合コードがある場合です。
=TEXTBEFORE(A1, "-", 2)
結果は ABC-2024 です。2番目のハイフンより前を指定することで、種別と年式だけを取り出せます。
活用例6:日付文字列から年月を抽出する
A1セルに 2026-05-17 の形式で日付文字列が入っている場合です。
=TEXTBEFORE(A1, "-", 2)
結果は 2026-05 です。年月集計のキーとして使う場合に重宝します。
活用例7:CSVのN列目までを取り出す
A1セルに 田中,太郎,営業部,東京,03-1234-5678 のようなCSVデータがある場合です。
=TEXTBEFORE(A1, ",", 3)
結果は 田中,太郎,営業部 です。先頭3列分だけを残して、残りを切り捨てる用途に使えます。
TEXTBEFORE・TEXTAFTER・TEXTSPLITの使い分け
文字列抽出系の新関数3つの使い分けを整理しておきます。それぞれ得意分野が違うので、シーンに応じて選択しましょう。
3関数の比較表
| 関数 | 抽出方向 | 返り値の形 | 使いどころ |
|---|---|---|---|
| TEXTBEFORE | 区切り文字より前 | 単一の文字列 | 苗字・ユーザー名・先頭部分を取り出す |
| TEXTAFTER | 区切り文字より後ろ | 単一の文字列 | ドメイン・名前・末尾部分を取り出す |
| TEXTSPLIT | 区切り文字で分割 | 配列(複数セルに展開) | 全要素を一気に列または行に展開する |
同じ文字列を両方向から処理する例
A1セルに user@example.com がある場合です。
=TEXTBEFORE(A1, "@") → "user"(@より前)
=TEXTAFTER(A1, "@") → "example.com"(@より後)
=TEXTSPLIT(A1, "@") → "user", "example.com"(B1とC1にスピル)
「片方だけ取り出したい」なら TEXTBEFORE / TEXTAFTER、「両方とも別セルで一気に取り出したい」なら TEXTSPLIT が最短です。
旧関数との対応表
LEFT・MID・RIGHT・FIND・SEARCH などの旧関数との対応も押さえておきましょう。
| やりたいこと | 旧関数の組み合わせ | 新関数 |
|---|---|---|
| 区切り文字より前を取り出す | LEFT(A1, FIND("@", A1) - 1) | TEXTBEFORE(A1, "@") |
| 区切り文字より後ろを取り出す | MID(A1, FIND("@", A1) + 1, LEN(A1)) | TEXTAFTER(A1, "@") |
| 区切り文字で全部分割 | LEFT と MID のネスト | TEXTSPLIT(A1, "@") |
旧関数は Excel 全バージョンで使えますが、新関数のほうが圧倒的に短くて読みやすいです。FIND 関数の詳細は ExcelのFIND関数の使い方 を、LEFT 関数の詳細は ExcelのLEFT関数の使い方 を合わせて確認してください。
TEXTBEFORE関数でよくあるエラーと対処法
実務で TEXTBEFORE を使っていると、いくつかのエラーや想定外の結果に出会うことがあります。代表的なケースと対処法をまとめました。
エラー一覧と原因
| エラー | 主な原因 | 対処法 |
|---|---|---|
#N/A | 区切り記号が文字列内に存在しない | 第6引数に代替値を指定、または第5引数で末尾検索 |
#VALUE! | インスタンスに 0 を指定している | インスタンスは 1 以上、または負の整数で指定する |
#VALUE! | 文字列引数が空、または不正な配列 | セル参照範囲とデータ型を確認する |
#NAME? | Excel 2019 以前で使用している | Microsoft 365 または Excel 2021 に更新する |
#N/A エラーの典型例と対処
A1セルに tanaka_example.com(@ なし)がある場合に =TEXTBEFORE(A1, "@") を実行すると #N/A が返ります。
対処法は2つあります。
=TEXTBEFORE(A1, "@", 1, 0, 0, "@なし")
=IFERROR(TEXTBEFORE(A1, "@"), "@なし")
第6引数を使うほうが意図が明確なので、優先して採用してください。
#VALUE! エラーの注意点
インスタンスを 0 にすると #VALUE! になります。「すべての区切り文字を対象にしたい」つもりで 0 を指定してしまう誤りが多いので注意しましょう。
=TEXTBEFORE(A1, ",", 0) → #VALUE!
=TEXTBEFORE(A1, ",", 1) → 正常(1番目のカンマより前)
全角・半角の区別に注意
TEXTBEFORE は 全角と半角を完全に区別 します。同じ「スペース」でも全角と半角は別物として扱われます。データのスペース種別を必ず確認しましょう。
=TEXTBEFORE(A1, " ") → "田中"(半角スペースで区切られた "田中 太郎" の場合)
=TEXTBEFORE(A1, " ") → #N/A(全角スペースで区切られた "田中 太郎" に半角スペースを指定した場合)
データのクレンジングが必要な場合は、事前に SUBSTITUTE 関数で全角スペースを半角に統一しておくと安全です。
ExcelのTEXTBEFORE関数 よくある質問(FAQ)
Q1. TEXTBEFORE関数は Excel 2019 や Excel 2016 でも使えますか?
使えません。TEXTBEFORE関数は Excel 2021 と Microsoft 365 で利用可能です。Excel 2019 以前のバージョンで実行すると #NAME? エラーが返ります。旧バージョンを使う環境では、LEFT(A1, FIND("@", A1) - 1) のように LEFT と FIND を組み合わせる従来の数式で代用してください。
Q2. 区切り文字に複数の候補(例:カンマかセミコロン)を指定できますか?
第2引数に配列定数 {",",";"} を渡すことで、複数の区切り記号を同時指定できます。=TEXTBEFORE(A1, {",",";"}) と書くと、カンマかセミコロンのどちらか先に見つかったほうを区切りとして使います。CSV と TSV が混在するデータの整形に便利です。
Q3. TEXTBEFORE と LEFT 関数の違いは何ですか?
LEFT 関数は「先頭から指定文字数」を取り出します。TEXTBEFORE は「指定した区切り文字より前」を取り出します。LEFT は文字数を数値で渡す必要があるため、区切り文字の位置を FIND で計算する手間が生じます。区切り文字をキーに抽出したい場合は TEXTBEFORE のほうが短く、可読性も高いです。
Q4. インスタンスに負の値を指定する意味は何ですか?
文字列の 末尾から数えた区切り文字の位置 を指定する意味です。例えば =TEXTBEFORE(A1, "", -1) とすると、最後の より前の部分が取れます。これはファイルパスからファイル名を除いたフォルダパスに相当します。複数の区切り文字を含む文字列で「最後の区切り以前を取りたい」シーンで重宝します。
Q5. 区切り文字が見つからない場合に元の文字列をそのまま返す方法はありますか?
第6引数の「見つからない場合」に元のセル参照を渡せば実現できます。
=TEXTBEFORE(A1, "@", 1, 0, 0, A1)
「@」が含まれない場合は A1 の値そのまま、含まれる場合は @ より前を返します。データの中に対象外の行が混じっていても、エラーを出さずに処理を続けたい場合に有効です。
Q6. スピル(動的配列)で範囲指定して一括処理できますか?
可能です。Microsoft 365 環境であれば次のように書けます。
=TEXTBEFORE(A2:A100, "@")
A2 から A100 までの全アドレスについて、それぞれユーザー名が縦方向にスピルされます。1行ずつ数式を貼る必要がなく、列全体の処理が一発で終わります。
まとめ
ExcelのTEXTBEFORE関数について、基本から実務応用までを解説しました。要点を振り返ります。
- TEXTBEFORE関数は 指定した区切り文字より前 の文字列を1つの数式で抽出できる
- 必須引数は 文字列・区切り記号 の2つだけで、最小構成なら
=TEXTBEFORE(A1, "@")の形 - インスタンス引数 で「N番目の区切り文字」を指定でき、負の値なら末尾から数える
- 第6引数の 「見つからない場合」 でエラー表示を制御でき、IFERROR より意図が明確
- TEXTAFTER・TEXTSPLIT とセットで覚えると、文字列操作の幅が一気に広がる
- 対応バージョンは Excel 2021 / Microsoft 365 限定、旧バージョンでは
#NAME?になる
LEFT 関数と FIND 関数のネストで書いていた数式を、TEXTBEFORE 一本に書き換えるだけでファイルの可読性が大きく改善します。まずはメールアドレスや氏名分割のような身近な例で試して、すぐに業務へ取り入れてみてください。