「メールアドレスから@より前のユーザー名だけ取り出したい」「フルネームから名字だけ抽出したい」――こんな場面で活躍するのが TEXTBEFORE関数 です。
LEFT関数やFIND関数を組み合わせれば同じことはできますが、TEXTBEFORE関数ならシンプルな1行の数式で完結します。Excel 2021・Microsoft 365から使えるようになった文字列操作の新関数です。
この記事では基本的な使い方から、インスタンス指定・エラー対処、TEXTAFTER・TEXTSPLITとの使い分けまで解説します。
TEXTBEFORE関数とは?
読み方と語源
「テキスト ビフォア」と読みます。TEXT(テキスト)+ BEFORE(〜より前)が語源で、「指定した文字よりも前の部分を抽出する」関数です。
できること
指定した 区切り文字(デリミタ)より前 の文字列を返します。
- メールアドレスの「@」より前のユーザー名を取り出す
- 「苗字 名前」の苗字だけを抽出する
- パスを区切りに使って特定の部分だけ取り出す
- 複数出現する区切り文字の「N番目」より前を指定できる
対応バージョン:Excel 2021・Microsoft 365(Excel 2019以前では使用不可)
TEXTBEFORE関数の書き方
基本構文
=TEXTBEFORE( 文字列, 区切り記号, [インスタンス], [一致モード], [検索方法], [見つからない場合] )
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 文字列 | 必須 | 抽出対象の文字列またはセル参照を指定します |
| 区切り記号 | 必須 | この文字より「前」を抽出する目印となる文字を指定します |
| インスタンス | 任意 | 区切り記号が複数ある場合に何番目を基準にするか指定します(省略時は1番目) |
| 一致モード | 任意 | 大文字・小文字を区別するか指定します(0=区別する/1=区別しない) |
| 検索方法 | 任意 | 区切り記号が見つからない場合に文字列全体を返すか指定します(0=全体を返す/1=エラーを返す) |
| 見つからない場合 | 任意 | 区切り記号が見つからない場合に表示する値を指定します(省略時は #N/A) |
基本的な使い方
例1:メールアドレスからユーザー名を抽出する
A1セルに user@example.com が入っている場合:
=TEXTBEFORE(A1, "@")
結果:user
「@」より前の文字列だけが取り出せます。
例2:フルネームから名字を抽出する
A1セルに 田中 太郎 が入っている場合(スペース区切り):
=TEXTBEFORE(A1, " ")
結果:田中
スペースより前の「田中」だけが返されます。
例3:複数の区切り文字がある場合(インスタンス指定)
A1セルに 田中,太郎,male,22 が入っている場合:
=TEXTBEFORE(A1, ",") → 「田中」(1番目のカンマより前)
=TEXTBEFORE(A1, ",", 2) → 「田中,太郎」(2番目のカンマより前)
=TEXTBEFORE(A1, ",", 3) → 「田中,太郎,male」(3番目のカンマより前)
インスタンスに 負の値 を指定すると、末尾から数えた番目になります。
=TEXTBEFORE(A1, ",", -1) → 「田中,太郎,male」(末尾から1番目のカンマより前)
エラー処理と「見つからない場合」引数
区切り記号が文字列の中に存在しない場合、デフォルトでは #N/A エラーが返されます。
見つからない場合に別の値を返す
=TEXTBEFORE(A1, "@", 1, 0, 0, "該当なし")
「@」が含まれないセルには「該当なし」が表示されます。データの中に対象外の行が混じっている場合に役立ちます。
見つからない場合に元の文字列を返す(検索方法=0)
=TEXTBEFORE(A1, "@", 1, 0, 0)
第5引数(検索方法)を 0 にすると、区切り記号が見つからない場合でも元の文字列全体が返されます。#N/A エラーで処理が止まるのを防ぎたいときに使えます。
大文字・小文字を区別しない検索
=TEXTBEFORE("Hello World", "world", 1, 1)
一致モードを 1 にすると、「World」と「world」を同一視します。大文字小文字が混在するデータでも安定して動作します。
実務での活用例
活用例1:URLからドメインを除いたパスを取得する
URLの https:// より後ろを取る場合はTEXTAFTERを使いますが、特定パスより前を取りたい場合はTEXTBEFOREが便利です。
=TEXTBEFORE("https://example.com/category/page", "/category")
→ "https://example.com"
活用例2:商品コードから種別を抽出する
商品コード ABC-001-JP の種別部分(ABC)だけを取り出す場合:
=TEXTBEFORE(A1, "-")
→ "ABC"
活用例3:ファイルパスからフォルダ名を抽出する
C:UserstanakaDocumentsreport.xlsx からファイル名前の部分まで取り出す:
=TEXTBEFORE(A1, "", -1)
→ "C:UserstanakaDocuments"
インスタンスに -1 を指定することで、最後の より前が返されます。
TEXTAFTER・TEXTSPLITとの使い分け
TEXTBEFORE関数と一緒に知っておきたい関数との比較です。
| 関数 | 抽出方向 | 使いどころ |
|---|---|---|
| TEXTBEFORE | 区切り文字より前 | ユーザー名・名字・先頭部分を取り出したい |
| TEXTAFTER | 区切り文字より後ろ | ドメイン・名前・末尾部分を取り出したい |
| TEXTSPLIT | 全体を複数セルに展開 | 分割した全要素を配列として使いたい |
同じ文字列に両方使う例(A1 = user@example.com):
=TEXTBEFORE(A1, "@") → "user"(@より前)
=TEXTAFTER(A1, "@") → "example.com"(@より後)
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
#N/A | 区切り記号が文字列内に存在しない | 第6引数に代替値を指定するか、第5引数を 0 にする |
#VALUE! | インスタンスに0を指定している | インスタンスは1以上または負の整数のみ有効 |
#VALUE! | 文字列引数が空の配列になっている | セル参照の範囲を確認する |
まとめ
TEXTBEFORE関数のポイントをまとめます。
- 指定した区切り記号より「前」の文字列を1つの数式で取り出せる
- インスタンス引数で「N番目の区切り文字より前」を柔軟に指定できる
- 区切り記号が見つからない場合のエラー処理も引数で制御できる
- TEXTAFTER・TEXTSPLITとセットで覚えると文字列操作の幅が大きく広がる
LEFT・FIND関数の組み合わせで書いていた数式を、TEXTBEFORE一本でシンプルに書き直してみてください。
