「メールアドレスからドメインだけ取り出したい」「スラッシュで区切られた品番を列に分けたい」「氏名(よみがな)のカッコ内だけを抜きたい」。こうした区切り文字(デリミタ)ベースの文字列操作を、これまではFIND+MID+LEN関数を組み合わせた複雑な数式で処理していました。Excel 365ではTEXTBEFORE・TEXTAFTER・TEXTSPLITの3関数が追加され、こうした操作を直感的な1式で書けるようになっています。
3関数の役割を一言で整理します。TEXTBEFOREは「指定した区切り文字より前(左側)」の文字列を返し、TEXTAFTERは「区切り文字より後(右側)」の文字列を返します。TEXTSPLITは「区切り文字でセルを複数のセルに分割」し、スピル(溢れ出し)で隣接セルへ自動展開します。3関数はいずれもExcel 365(Microsoft 365サブスクリプション版)で使用可能です。
本記事では、TEXTBEFORE・TEXTAFTER・TEXTSPLITの基本構文・引数の使い方・実務5シナリオ・LEFT/MID/FINDとの使い分け・よくあるエラーの対処法・MOS Excel試験の出題ポイントを体系的に解説します。
TEXTBEFORE・TEXTAFTER・TEXTSPLITの基本構文と役割の違い
3関数の構文を並べて確認します。
=TEXTBEFORE(テキスト, 区切り文字, [instance_num], [match_mode], [match_end], [if_not_found])
=TEXTAFTER(テキスト, 区切り文字, [instance_num], [match_mode], [match_end], [if_not_found])
=TEXTSPLIT(テキスト, [col_delimiter], [row_delimiter], [ignore_empty], [match_mode], [pad_with])
| 関数 | 取り出す部分 | 出力セル数 | 典型的な用途 |
|---|---|---|---|
| TEXTBEFORE | 区切り文字より前(左側) | 1セル(文字列) | 名字だけ取り出し・拡張子を除いたファイル名・部門コードのプレフィックス抽出 |
| TEXTAFTER | 区切り文字より後(右側) | 1セル(文字列) | メールのドメイン・ファイルの拡張子・スラッシュ後ろのパス取り出し |
| TEXTSPLIT | 区切り文字で全体を分割 | 複数セル(スピル) | CSV形式の1セルを列展開・品番コードを各要素に分割 |
具体例:「東京-営業部-山田太郎」という文字列をA1に入力し、3関数の結果を比較します。
| 数式 | 結果 | 説明 |
|---|---|---|
| =TEXTBEFORE(A1, “-“) | 東京 | 最初の「-」より前 |
| =TEXTAFTER(A1, “-“) | 営業部-山田太郎 | 最初の「-」より後 |
| =TEXTSPLIT(A1, “-“) | 東京 / 営業部 / 山田太郎 | 「-」で3列に展開(スピル) |
TEXTBEFORE関数:区切り文字より前を抽出する
=TEXTBEFORE(テキスト, 区切り文字, [instance_num], [match_mode], [match_end], [if_not_found])
| 引数 | 省略 | 説明 |
|---|---|---|
| テキスト | 必須 | 処理する文字列またはセル参照 |
| 区切り文字 | 必須 | 区切り位置となる文字列(複数を配列{}で指定可) |
| instance_num | 省略可(既定1) | 何番目の区切り文字を基準にするか。正数は先頭から、負数は末尾から数える |
| match_mode | 省略可(既定0) | 0=大文字小文字を区別、1=区別しない |
| match_end | 省略可(既定0) | 1=テキスト末尾を区切り文字として扱う |
| if_not_found | 省略可 | 区切り文字が見つからない場合の戻り値(省略時は#N/Aエラー) |
基本の使い方:
' A1 = "report_2026_07.xlsx"
=TEXTBEFORE(A1, ".") ' → "report_2026_07"(拡張子より前)
=TEXTBEFORE(A1, "_") ' → "report"(最初のアンダースコアより前)
=TEXTBEFORE(A1, "_", 2) ' → "report_2026"(2番目のアンダースコアより前)
instance_num に負の数を指定する(末尾から数える):
' A1 = "東京/渋谷/神南/建物A"
=TEXTBEFORE(A1, "/", -1) ' → "東京/渋谷/神南"(末尾から1番目の「/」より前)
=TEXTBEFORE(A1, "/", -2) ' → "東京/渋谷"(末尾から2番目の「/」より前)
if_not_found で区切り文字なし時のエラー回避:
' A1 = "山田太郎"(カッコなし)
=TEXTBEFORE(A1, "(", 1, 0, 0, "") ' → ""(区切り文字なし時は空文字を返す)
' if_not_foundを省略した場合: #N/Aエラーが返る
実務では顧客リストや商品マスタに「カッコあり/なし」が混在するケースが多いため、if_not_found に空文字または適切なデフォルト値を必ず指定する習慣をつけましょう。
TEXTAFTER関数:区切り文字より後を抽出する
=TEXTAFTER(テキスト, 区切り文字, [instance_num], [match_mode], [match_end], [if_not_found])
引数の構造はTEXTBEFOREと同じです。区切り文字より「後ろ(右側)」を返す点が異なります。
' A1 = "tanaka@example.co.jp"
=TEXTAFTER(A1, "@") ' → "example.co.jp"(@以降のドメイン全体)
=TEXTAFTER(A1, ".", -1) ' → "jp"(末尾から1番目のドットより後)
' A1 = "品番: A001-B-東京"
=TEXTAFTER(A1, ": ") ' → "A001-B-東京"(コロンスペースより後)
=TEXTAFTER(A1, "-", 2) ' → "東京"(2番目の「-」より後)
match_mode=1 で大文字小文字を区別しない:
' A1 = "DocABC.pdf"
=TEXTAFTER(A1, "doc", 1, 0) ' → #N/A(区別する→"doc"が見つからない)
=TEXTAFTER(A1, "doc", 1, 1) ' → "ABC.pdf"(区別しない→"Doc"にマッチ)
社内ファイル名の命名規則が統一されておらず大文字小文字が混在している場合は、match_mode=1 を指定することで安定した結果が得られます。
TEXTSPLIT関数:区切り文字でセルを複数に分割する
=TEXTSPLIT(テキスト, [col_delimiter], [row_delimiter], [ignore_empty], [match_mode], [pad_with])
| 引数 | 省略 | 説明 |
|---|---|---|
| テキスト | 必須 | 分割する文字列またはセル参照 |
| col_delimiter | 省略可 | 列方向(横)の区切り文字。複数を配列{}で指定可 |
| row_delimiter | 省略可 | 行方向(縦)の区切り文字。省略時は行分割なし |
| ignore_empty | 省略可(既定FALSE) | TRUEで空の要素を無視(連続区切りで空欄セルを作らない) |
| match_mode | 省略可(既定0) | 0=大文字小文字を区別、1=区別しない |
| pad_with | 省略可(既定#N/A) | 2Dスピルで要素数が揃わない行の埋め値 |
基本:列方向(横)に分割する col_delimiter
' A1 = "東京,大阪,名古屋,福岡"
=TEXTSPLIT(A1, ",")
' → B1=東京 C1=大阪 D1=名古屋 E1=福岡(横に4列展開)
' A1 = "A001-日用品-関東"
=TEXTSPLIT(A1, "-")
' → B1=A001 C1=日用品 D1=関東
行方向(縦)に分割する row_delimiter
' A1 = "東京|大阪|名古屋" (パイプ区切り)
=TEXTSPLIT(A1, , "|") ' col_delimiterを省略してrow_delimiterに"|"を指定
' → A1=東京 / A2=大阪 / A3=名古屋(縦に3行展開)
複数の区切り文字を同時に指定する
' A1 = "東京,大阪;名古屋/福岡" (複数の区切り文字が混在)
=TEXTSPLIT(A1, {",",";","/"}) ' 3種類の区切り文字を配列で指定
' → 東京 / 大阪 / 名古屋 / 福岡(横4列展開)
ignore_empty=TRUE で連続区切りの空欄を除去する
' A1 = "東京,,大阪,,,名古屋" (コンマが連続)
=TEXTSPLIT(A1, ",") ' → 東京 / (空) / 大阪 / (空) / (空) / 名古屋
=TEXTSPLIT(A1, ",", , TRUE) ' → 東京 / 大阪 / 名古屋(空要素を除去)
実務5シナリオ:TEXTBEFORE・TEXTAFTER・TEXTSPLITの活用パターン
シナリオ1:メールアドレスからユーザー名とドメイン名を分離する
顧客リストや社員マスタで、メールアドレスを「ユーザー名」と「ドメイン名」に分けて管理したいケースです。
' A2 = "tanaka@example.co.jp"
' B2: ユーザー名(@より前)
=TEXTBEFORE(A2, "@") ' → "tanaka"
' C2: ドメイン全体(@より後)
=TEXTAFTER(A2, "@") ' → "example.co.jp"
' D2: トップレベルドメインのみ(最後のドットより後)
=TEXTAFTER(A2, ".", -1) ' → "jp"
' E2: ドメイン名(@より後・最後のドットより前)
=TEXTBEFORE(TEXTAFTER(A2, "@"), ".", -1) ' → "example.co"
シナリオ2:「氏名(よみがな)」形式からよみがなを抽出する
「山田太郎(やまだたろう)」の形式で入力されたデータから、カッコ内のよみがなだけを取り出します。
' A2 = "山田太郎(やまだたろう)"
' B2: 氏名のみ(全角カッコより前)
=TEXTBEFORE(A2, "(") ' → "山田太郎"
' C2: よみがなのみ(全角カッコを区切り文字に)
=TEXTBEFORE(TEXTAFTER(A2, "("), ")") ' → "やまだたろう"
' 別解:TEXTSPLITで分割してから参照
=TEXTSPLIT(A2, {"(",")"}, , TRUE)
' → 山田太郎 / やまだたろう(TRUEで閉じカッコ後の空要素を除去)
シナリオ3:商品コード「A001-日用品-東京」を列展開してSUMIFS集計に使う
商品管理で「分類コード-カテゴリ-地域」の形式で入力されたデータを列分解し、ピボットテーブルやSUMIFS集計に使える状態にします。
' A2 = "A001-日用品-東京"
' B2 にTEXTSPLITを入力 → B2:D2 に自動展開
=TEXTSPLIT(A2, "-")
' → B2=A001 C2=日用品 D2=東京
' B列・C列・D列をヘッダーで集計できる状態になる
' 例:D列「東京」を条件に売上を合計
=SUMIFS(E2:E100, D2:D100, "東京")
シナリオ4:1セルにまとまった選択肢データを列展開する
アンケートや外部システムからインポートしたデータで「Excel,Word,PowerPoint」の形式で1セルに複数値が入っている場合に、TEXTSPLITで列展開したうえで集計します。
' A2 = "Excel,Word,PowerPoint"
=TEXTSPLIT(A2, ",")
' → B2=Excel C2=Word D2=PowerPoint
' 複数行を一括処理したい場合はBYROW関数と組み合わせる
' A2:A5 に複数行入力されている場合
=BYROW(A2:A5, LAMBDA(r, TEXTSPLIT(r, ",")))
' → 各行を自動でTEXTSPLITして2次元配列に展開
シナリオ5:ファイルパスからファイル名と拡張子を分離する
フォルダ管理台帳などで「C:\Users\User\Desktop\報告書_2026.xlsx」の形式で記録されたパスから、ファイル名と拡張子を取り出します。
' A2 = "C:\Users\User\Desktop\報告書_2026.xlsx"
' ファイル名(最後のバックスラッシュより後)
=TEXTAFTER(A2, "\", -1) ' → "報告書_2026.xlsx"
' ファイル名から拡張子を除いた部分
=TEXTBEFORE(TEXTAFTER(A2, "\", -1), ".") ' → "報告書_2026"
' 拡張子のみ
=TEXTAFTER(A2, ".", -1) ' → "xlsx"
LEFT・MID・FINDとの使い分け:どのアプローチを選ぶか
Excel 2019以前の環境や互換性が必要なファイルではLEFT/MID/RIGHT/FINDの組み合わせが必要です。Excel 365専用ファイルではTEXTBEFORE/TEXTAFTER/TEXTSPLITを優先することで数式を大幅に短縮できます。
| 操作内容 | LEFT/MID/FIND式 | TEXTBEFORE/TEXTAFTER式 | 優位性 |
|---|---|---|---|
| @より前を取り出す | =LEFT(A1, FIND(“@”,A1)-1) | =TEXTBEFORE(A1,”@”) | TEXTBEFORE:短く可読性が高い |
| @より後を取り出す | =MID(A1, FIND(“@”,A1)+1, 100) | =TEXTAFTER(A1,”@”) | TEXTAFTER:文字数の推定不要 |
| 区切り文字で全分割 | 区切り位置ウィザード(手動)またはFIND×複数 | =TEXTSPLIT(A1,”,”) | TEXTSPLIT:スピルで一気に展開 |
| 2番目の区切り文字まで | =LEFT(A1, FIND(“★”,SUBSTITUTE(A1,”/”,”★”,2))-1) | =TEXTBEFORE(A1,”/”,2) | TEXTBEFORE:instance_numで簡潔 |
| 末尾から数えた区切り以降 | =MID(A1,FIND(“★”,SUBSTITUTE(A1,”/”,”★”,LEN(A1)-LEN(SUBSTITUTE(A1,”/”,””))))+1,100) | =TEXTAFTER(A1,”/”,-1) | TEXTAFTER:負の数で直感的 |
使い分けの基準:互換性が必要(Excel 2019・2021で開くファイル)→ LEFT/MID/FIND。Excel 365専用ファイルで可読性重視→ TEXTBEFORE/TEXTAFTER。区切り文字で複数セルに展開したい→ TEXTSPLITまたは区切り位置ウィザード(繰り返し作業ならTEXTSPLIT)。
よくあるエラーと原因・対処法
| 症状・エラー | 原因 | 対処法 |
|---|---|---|
| #N/A | 区切り文字がテキスト内に存在しない | if_not_found引数に代替値を指定する(例: TEXTBEFORE(A1,”@”,1,0,0,””)) |
| #SPILL! | TEXTSPLITのスピル先に別のデータが入っている | 展開先セル範囲を空にする。または結果を空白エリアにコピー後、値貼り付けで転記する |
| 期待と違う部分が取れる | instance_numの数え方を誤った(正数=先頭から、負数=末尾から) | 正の数=先頭から/負の数=末尾からを確認し、instance_numを調整する |
| 全角・半角の混在で一致しない | テキストの区切り文字が全角と半角で混在している | SUBSTITUTE関数で表記を統一してから渡す(例: TEXTAFTER(SUBSTITUTE(A1,”,”,”,”),”,”)) |
| 大文字・小文字が一致しない | match_mode省略(既定0=区別する)で大小文字が違う | match_modeを1に設定する |
| #VALUE! | テキスト引数に数値など文字列以外が渡された | TEXT関数でセルを文字列変換してから渡す(例: TEXTBEFORE(TEXT(A1,”0″),”-“)) |
MOS Excel試験でのTEXTBEFORE・TEXTAFTER・TEXTSPLIT出題ポイント
TEXTBEFORE・TEXTAFTER・TEXTSPLITはExcel 365(Microsoft 365)でのみ使用可能な新関数です。MOS Excel 365試験の「数式と関数」スキル項目の中で出題対象となっています。
- TEXTBEFORE/TEXTAFTERの基本操作:「@以前の文字列を取り出す」「最後の区切り文字以降を取り出す」という問題が出る。instance_numで何番目の区切り文字を使うかを適切に選択できるかが問われる
- if_not_found引数の活用:区切り文字が存在しない場合に#N/Aを防ぐために使う引数であることを把握しておく。「エラーが出ないようにせよ」という指示にはif_not_foundに空文字を指定する
- TEXTSPLITのスピル動作:数式を1セルに入力するだけで複数セルに結果が自動展開されることを理解する。スピル先に値が入っているとエラーになる点も押さえる
- col_delimiter/row_delimiterの使い分け:列方向(横)に分割するか、行方向(縦)に分割するかを問題文の指示から判断して正しい引数を指定できる必要がある
- LEFT/MID/FINDとの違い:区切り文字が変わっても数式を修正しなくてよい点、文字数計算が不要な点がTEXTBEFORE/TEXTAFTERの優位性として問われることがある
MOS試験 TEXTBEFORE・TEXTAFTER・TEXTSPLITチェックリスト
| 確認ポイント | 操作内容 | 難易度 |
|---|---|---|
| TEXTBEFORE基本入力 | =TEXTBEFORE(A1,”@”)を正しく入力できる | ★☆☆ |
| TEXTAFTER基本入力 | =TEXTAFTER(A1,”@”)でメールドメインを取り出せる | ★☆☆ |
| instance_numで2番目以降の区切り | =TEXTBEFORE(A1,”/”,2)で2番目のスラッシュ前を取り出せる | ★★☆ |
| 負のinstance_numで末尾から | =TEXTAFTER(A1,”.”,-1)で最後のドット以降を取り出せる | ★★☆ |
| TEXTSPLITで列展開 | =TEXTSPLIT(A1,”,”)でカンマ区切りデータを横展開できる | ★★☆ |
| if_not_foundでエラー回避 | 6番目の引数に””を指定して区切り文字なしの場合に空文字を返せる | ★★★ |
| ignore_emptyで空要素除去 | =TEXTSPLIT(A1,”,”,, TRUE)で連続区切りの空欄を除去できる | ★★★ |
| #SPILL!の原因と対処 | スピル先に値がある場合に#SPILL!が出ることを把握し対処できる | ★★★ |
まとめ:3関数の使い分けポイント
本記事のポイントをまとめます。
- TEXTBEFORE:区切り文字より前の文字列を1セルで返す。instance_numで何番目の区切り文字を基準にするか指定でき、負の数で末尾から数えられる
- TEXTAFTER:区切り文字より後の文字列を1セルで返す。メールのドメイン・ファイル拡張子・パスの末尾ファイル名取り出しに最適
- TEXTSPLIT:区切り文字で文字列を分割し、スピルで複数セルに自動展開する。col_delimiterで列方向、row_delimiterで行方向に分割できる
- if_not_found引数:区切り文字が見つからない場合のデフォルトは#N/Aエラー。実務では必ずif_not_foundに空文字やゼロを指定してエラーを制御する
- Excel 365専用:3関数はExcel 2019・2021では使用できない。互換性が必要なファイルではLEFT/MID/FIND組み合わせ式を維持する
- LEFT/MID/FINDとの使い分け:Excel 365専用環境ではTEXTBEFORE/TEXTAFTER/TEXTSPLITを優先する。数式が短く可読性が高く、instance_numで複数の区切り文字を直接指定できる点が優位
TEXTBEFORE・TEXTAFTER・TEXTSPLITを活用することで、これまでFIND関数とMID関数を何重にも重ねていた複雑な数式が1行で書けるようになります。まずメールアドレスや品番コードのデータで3関数を試し、instance_numと負の数の組み合わせを練習することで実務への定着が早まります。
PR
TEXTBEFORE・TEXTAFTER・TEXTSPLITをはじめExcel 365の新関数を含む300以上の関数を図解で解説。Copilotとの連携活用も収録しており、関数を実務で引き出せるようになりたい方に最適な一冊です。
PR
文字列操作・検索・集計・日付計算など実務で頻出の関数を厳選して解説。テキスト処理系の関数の使いどころを実例ベースで把握したい方や、MOS Excel試験対策として引数を整理したい方にも向いています。
