「メールアドレスから@より後ろのドメインだけ取り出したい」「ファイルパスからファイル名だけ抜き出したい」――。こんな文字列操作で時間を取られていませんか。
従来はRIGHT関数とFIND関数とLEN関数を組み合わせた長い数式が必要でした。読みづらく、後から見返したときに修正に手間がかかる数式です。
そんな手間を一気に解消してくれるのが TEXTAFTER関数(テキストアフター関数) です。区切り文字より後ろの文字列を、たった一行の数式で取り出せます。
この記事ではTEXTAFTER関数の使い方を網羅的に解説します。書式・基本例・複数区切り・後ろから数えた抽出・TEXTBEFOREとの使い分け・エラー対処・FAQまでカバーしています。Excel 2021とMicrosoft 365で使える便利な新関数を、明日から実務で活かしてください。
TEXTAFTER関数とは?読み方と何ができるか
まずはTEXTAFTER関数の正体を整理しておきます。読み方・語源・対応バージョン・できることを順に確認しましょう。
読み方と語源
TEXTAFTERは「テキスト アフター」と読みます。TEXT(テキスト)+ AFTER(〜より後)が語源です。
つまり「指定した文字よりも後ろの部分を抽出するテキスト関数」というのが、関数名そのものに表れています。対になる関数として、前の部分を取り出すTEXTBEFORE関数(テキストビフォア)が用意されています。
TEXTAFTER関数でできること
TEXTAFTER関数は、文字列の中から指定した 区切り文字(デリミタ)より後ろ の部分を抽出します。
具体的には次のような処理を1つの数式で実現できます。
- メールアドレスの「@」より後ろのドメインを取り出す
- ファイルパスの最後の「」より後ろのファイル名を取り出す
- 「苗字 名前」形式から名前だけを抽出する
- カンマ区切りデータから特定の項目だけを切り出す
- URLから特定のディレクトリ以降を取得する
しかも区切り文字が複数ある場合に「何番目を基準にするか」も指定できます。負の値を使えば末尾から数えることも可能です。
対応バージョンと注意点
TEXTAFTER関数は新しい関数です。対応バージョンを必ず事前に確認してください。
| バージョン | TEXTAFTER関数の利用可否 |
|---|---|
| Microsoft 365 | 使える |
| Excel 2021 | 使える |
| Excel 2019 | 使えない |
| Excel 2016 / 2013 | 使えない |
Excel 2019以前ではTEXTAFTER関数を使えません。共有先の環境がExcel 2019以前の場合は、FIND関数とRIGHT関数を組み合わせる従来の方法で書く必要があります。
TEXTAFTER関数の書式と引数
TEXTAFTER関数は引数が多めです。とはいえ実務で使うのは最初の2〜3個がほとんどです。まずは全体像を掴みましょう。
基本構文
=TEXTAFTER(文字列, 区切り記号, [インスタンス], [一致モード], [検索方法], [見つからない場合])
必須引数は 文字列 と 区切り記号 の2つだけです。3つ目以降は省略可能で、必要に応じて指定します。
引数一覧表
各引数の役割をまとめておきます。
| 引数 | 必須/任意 | 既定値 | 説明 |
|---|---|---|---|
| 文字列 | 必須 | ― | 抽出元の文字列またはセル参照を指定します |
| 区切り記号 | 必須 | ― | この文字より「後ろ」を抽出する目印を指定します |
| インスタンス | 任意 | 1 | 区切り記号が複数ある場合に何番目を基準にするか指定します |
| 一致モード | 任意 | 0 | 大文字小文字を区別するか指定します(0=区別する/1=区別しない) |
| 検索方法 | 任意 | 0 | 末尾から検索するかどうかを指定します(0=先頭から/1=末尾から) |
| 見つからない場合 | 任意 | #N/A | 区切り記号が見つからないときに返す値を指定します |
引数を使い分ける目安
引数の選び方には次のような目安があります。
- 1〜2個だけ使う:シンプルな抽出ならこれで足りる
- 3個目(インスタンス)を使う:区切り記号が複数あるとき
- 6個目(見つからない場合)を使う:エラーを別の文字に置き換えたいとき
- 4・5個目はあまり使わない:特殊なケースで登場する程度
最初は文字列と区切り記号の2つだけ覚えれば十分です。慣れてきたらインスタンスと「見つからない場合」を追加していきましょう。
TEXTAFTER関数の基本的な使い方
ここからは実際の使用例を見ていきます。まずは最もシンプルなパターンからです。
例1:メールアドレスからドメインを取り出す
メールアドレスを「@」で分けて、後ろのドメイン部分だけ取り出してみます。
A2セルに tanaka@example.com が入っているとしましょう。
=TEXTAFTER(A2, "@")
結果は example.com です。「@」より後ろの文字列だけが抽出されます。
例2:氏名から「名前」だけを抽出する
「苗字 名前」のように半角スペース区切りの氏名から、名前だけを取り出す例です。
A2セルに 田中 太郎 が入っているとします。
=TEXTAFTER(A2, " ")
結果は 太郎 です。半角スペースより後ろの「太郎」だけが返されます。
全角スペース区切りの場合は、区切り記号も全角スペースで書きます。区切り記号は 完全一致 が原則です。
例3:商品コードからサイズだけ取り出す
商品コードのような構造化された文字列にも応用できます。
A2セルに PROD-1234-LL のような商品コードが入っているとしましょう。サイズ部分の LL だけを取り出します。
=TEXTAFTER(A2, "-", -1)
結果は LL です。インスタンス引数に -1 を指定すると「末尾から1番目のハイフン」が基準になります。
例4:従来の数式との比較
TEXTAFTER関数のありがたみは、従来の数式と比べると一目瞭然です。
'--- TEXTAFTER関数(新しい書き方) ---
=TEXTAFTER(A2, "@")
'--- 従来の書き方(RIGHT + FIND + LEN の組み合わせ) ---
=RIGHT(A2, LEN(A2) - FIND("@", A2))
どちらも結果は同じです。しかし読みやすさはTEXTAFTER関数が圧倒的です。
しかも従来の式は「@がない場合」にエラー処理を自前で書く必要がありました。TEXTAFTER関数なら引数1つでエラー処理まで指定できます。
TEXTAFTER関数の使い方|複数の区切り文字を指定する
区切り文字が複数回登場する文字列では、インスタンス引数が活躍します。CSVデータやログから特定の項目を切り出す場面で重宝します。
インスタンス引数の基本
インスタンス引数は「何番目の区切り文字を基準にするか」を整数で指定します。省略すると 1 が使われます。
A2セルに 田中,太郎,male,22 というカンマ区切りデータが入っているとしましょう。
'--- 1番目のカンマより後ろ(省略時と同じ) ---
=TEXTAFTER(A2, ",")
'--- 結果:太郎,male,22
'--- 2番目のカンマより後ろ ---
=TEXTAFTER(A2, ",", 2)
'--- 結果:male,22
'--- 3番目のカンマより後ろ ---
=TEXTAFTER(A2, ",", 3)
'--- 結果:22
インスタンスを変えるだけで、取り出す範囲がスライドしていきます。
TEXTBEFOREと組み合わせて中間項目を切り出す
「2番目と3番目のカンマの間」のように、中間の項目だけ欲しいときがあります。その場合はTEXTAFTERとTEXTBEFOREを組み合わせます。
先ほどの 田中,太郎,male,22 から male だけを取り出してみましょう。
'--- まず2番目のカンマより後ろを取り出す ---
'--- 結果:male,22
'--- そこから1番目のカンマより前を取り出す
=TEXTBEFORE(TEXTAFTER(A2, ",", 2), ",")
'--- 最終結果:male
2段階で考えるのがコツです。最初に「ここから後ろ」、次に「ここまで前」と切り出します。
これはTEXTSPLIT関数でも実現できますが、特定の1項目だけ欲しい場合はこの組み合わせのほうがシンプルです。
CSVデータからN番目の項目を抜き出す関数のひな型
汎用的なひな型として覚えておくと便利です。N番目の項目を取り出す式は次のようになります。
'--- N番目の項目を取り出す汎用パターン ---
'--- A2のカンマ区切り文字列から、3番目(指定したN番目)の項目を取り出す例
=TEXTBEFORE(TEXTAFTER("," & A2, ",", 3), ",")
文字列の先頭に "," を結合しているのがポイントです。これで「最初の項目」も同じロジックで扱えます。
ただし、項目数が多い場合はTEXTSPLIT関数で配列に展開してからINDEX関数で取り出すほうが見通しが良くなります。場面で使い分けましょう。
TEXTAFTER関数の使い方|後ろから数えた位置で抽出する
TEXTAFTER関数の隠れた便利機能が 負のインスタンス指定 です。末尾から数えた区切り文字を基準にできます。
負のインスタンスの基本
インスタンスに -1 を指定すると「末尾から1番目」、-2 なら「末尾から2番目」となります。
A2セルに 田中,太郎,male,22 が入っている例で確認しましょう。
'--- 末尾から1番目のカンマより後ろ ---
=TEXTAFTER(A2, ",", -1)
'--- 結果:22
'--- 末尾から2番目のカンマより後ろ ---
=TEXTAFTER(A2, ",", -2)
'--- 結果:male,22
'--- 末尾から3番目のカンマより後ろ ---
=TEXTAFTER(A2, ",", -3)
'--- 結果:太郎,male,22
データの構造が不規則で、項目数が一定でない場合に重宝します。
ファイルパスからファイル名だけ取り出す
最も実用的なのがファイルパスの処理です。フォルダ階層が深くても、ファイル名だけをきれいに取り出せます。
A2セルに C:UserstanakaDocumentsreport.xlsx が入っているとしましょう。
'--- 末尾の「」より後ろを取り出す ---
=TEXTAFTER(A2, "", -1)
'--- 結果:report.xlsx
フォルダの階層が3層でも10層でも、結果は常に最後のファイル名になります。階層の深さを気にしなくて済むのが大きな利点です。
URLから末尾のスラッグを取り出す
URLからページのスラッグ部分だけを抜き出すケースにも応用できます。
A2セルに https://mashukabu.com/excel-function-howto-use-textafter/ が入っている場合を考えます。末尾のスラッシュが邪魔ですね。
'--- まず末尾のスラッシュを取り除く ---
'--- その後、末尾から2番目の「/」より後ろを取り出す
=TEXTAFTER(TRIM(SUBSTITUTE(A2, "/", "/", LEN(A2)-LEN(SUBSTITUTE(A2, "/", "")))), "/", -1)
少し複雑ですが、SUBSTITUTEで前処理してからTEXTAFTERに渡すパターンを覚えておくと、不規則なURLにも対応できます。
拡張子だけを取り出す
ファイル名から拡張子だけを取り出すのもTEXTAFTERが得意です。
'--- ファイル名から拡張子を取り出す ---
=TEXTAFTER(A2, ".", -1)
'--- 例:report.xlsx → xlsx
'--- 例:archive.tar.gz → gz(複数のドットがあっても末尾のみ)
ドットが複数あるファイル名でも、末尾の拡張子だけを正しく抽出できます。
TEXTAFTER関数とTEXTBEFORE・TEXTSPLITとの使い分け
TEXTAFTER関数は、TEXTBEFORE関数・TEXTSPLIT関数とセットで覚えるのが効率的です。3つの関数の役割を整理しましょう。
3つの関数の役割比較
それぞれの関数は守備範囲が明確に分かれています。
| 関数 | 抽出する範囲 | 結果の形 | 使いどころ |
|---|---|---|---|
| TEXTBEFORE | 区切り文字より前 | 1つの値 | ユーザー名・苗字・先頭部分が欲しいとき |
| TEXTAFTER | 区切り文字より後 | 1つの値 | ドメイン・名前・末尾部分が欲しいとき |
| TEXTSPLIT | 全体を分割 | 複数セルに展開 | 全項目を別々のセルに展開したいとき |
「結果が1つ欲しい」のか「全部欲しい」のかで使い分けるのが基本です。
TEXTBEFORE と TEXTAFTER の対比
同じ文字列に両方を使うと、ちょうど前後で切り分けられます。
A2セルに user@example.com が入っているとします。
'--- @より前を取り出す(TEXTBEFORE) ---
=TEXTBEFORE(A2, "@")
'--- 結果:user
'--- @より後を取り出す(TEXTAFTER) ---
=TEXTAFTER(A2, "@")
'--- 結果:example.com
メールアドレスのリストから「ユーザー名」と「ドメイン」を別々の列に分けたいときによく使う組み合わせです。
TEXTSPLIT が向くケース
カンマ区切りの全項目を別々のセルに展開したいときは、TEXTSPLIT関数が圧倒的に楽です。
'--- A2 = 「田中,太郎,male,22」を4つのセルに展開 ---
=TEXTSPLIT(A2, ",")
'--- 結果:B2に「田中」、C2に「太郎」、D2に「male」、E2に「22」がスピルされる
ただし、欲しいのが「3番目の項目だけ」のように1つだけなら、TEXTAFTERとTEXTBEFOREの組み合わせのほうが行が増えなくて済みます。
使い分けの判断フロー
迷ったときは次の順で考えると決めやすいです。
- 全項目を別々のセルに展開したい → TEXTSPLIT
- 1つの値だけ欲しくて、それが前半部分 → TEXTBEFORE
- 1つの値だけ欲しくて、それが後半部分 → TEXTAFTER
- 中間の項目が欲しい → TEXTAFTER + TEXTBEFORE の組み合わせ
この4パターンを押さえておけば、文字列分割の大半に対応できます。
TEXTAFTER関数でよくあるエラーと対処法
便利な関数ですが、引数の指定ミスや想定外のデータでエラーになることもあります。代表的なエラーと対処法を押さえておきましょう。
エラー一覧
TEXTAFTER関数で発生しやすいエラーをまとめました。
| エラー | 主な原因 | 対処法 |
|---|---|---|
| #N/A | 区切り記号が文字列内に存在しない | 第6引数に代替値を指定する |
| #VALUE! | インスタンスに 0 を指定している | 1以上または負の整数を指定する |
| #VALUE! | インスタンスの絶対値が区切り記号の出現数を超えている | データを見直すかインスタンスを調整する |
| #NAME? | 関数名のスペルミス、または対応していないバージョンで使用 | スペルとExcelのバージョンを確認する |
| #SPILL! | スピル先のセルが空いていない | スピル先のセルを空ける |
#N/A エラー:区切り記号が見つからない
最もよく出会うのが #N/A エラーです。指定した区切り記号が文字列の中に存在しないと発生します。
'--- A2 に「user_example」(@が含まれない)が入っている場合 ---
=TEXTAFTER(A2, "@")
'--- 結果:#N/A エラー
対処法は2つあります。
対処法1:第6引数で代替値を指定する
=TEXTAFTER(A2, "@", , , , "該当なし")
'--- @が含まれない場合は「該当なし」が表示される
カンマの数に注意してください。第3・第4・第5引数を省略する場合でも、カンマは必要です。
対処法2:IFERROR関数で包む
=IFERROR(TEXTAFTER(A2, "@"), "該当なし")
'--- TEXTAFTERがエラーになったら「該当なし」を返す
IFERROR関数で包むほうが直感的で、他の関数でも使い回しやすい書き方です。
#VALUE! エラー:インスタンスが不正
インスタンス引数に 0 を指定するとエラーになります。インスタンスは1以上の整数か、負の整数(末尾から数える)のみ有効です。
'--- これはエラー ---
=TEXTAFTER(A2, ",", 0)
'--- 結果:#VALUE! エラー
'--- 正しくは1以上または負の整数 ---
=TEXTAFTER(A2, ",", 1) '正常
=TEXTAFTER(A2, ",", -1) '正常
「0番目」という概念がないことを意識しておきましょう。
#NAME? エラー:バージョン非対応
数式を入力しても #NAME? が出る場合は、Excelのバージョンが古い可能性があります。
ファイル → アカウント でバージョンを確認してください。Excel 2019以前ではTEXTAFTER関数自体が使えません。
その場合は次のような従来式に書き換える必要があります。
'--- TEXTAFTER関数の代替(Excel 2019以前向け) ---
=RIGHT(A2, LEN(A2) - FIND("@", A2))
'--- @以降を取り出す従来の書き方
#SPILL! エラー:配列入力の競合
複数セルに対してTEXTAFTERを使うとスピルが発生します。スピル先に既存データがあるとエラーになります。
=TEXTAFTER(A2:A10, "@")
'--- B2 から B10 にスピルしようとするが、B5に既存データがあると #SPILL! エラー
スピル先の範囲を空けるか、対象セルを一つずつ指定する数式に書き換えましょう。
TEXTAFTER関数のよくある質問(FAQ)
ここでは実務でよく聞かれる疑問を整理しておきます。
Q1. TEXTAFTER関数はどのバージョンのExcelから使えますか
Excel 2021とMicrosoft 365で使えます。Excel 2019以前では使えません。
社内で共有するファイルにTEXTAFTER関数を使う場合は、相手のExcelバージョンを必ず確認してください。Excel 2019で開くと数式部分が #NAME? エラーになり、値も表示されなくなります。
Q2. 区切り文字に複数の候補を指定できますか
TEXTAFTER関数の区切り記号には 配列 も指定できます。複数の候補を渡したい場合は中括弧で囲みます。
'--- カンマ・セミコロン・タブのどれかで区切る ---
=TEXTAFTER(A2, {",", ";", CHAR(9)})
文字列内で最初に見つかったいずれかの区切り記号で抽出します。データ提供元によって区切り文字がバラバラな場合に便利です。
Q3. 大文字と小文字を区別したくないときはどうすればいいですか
第4引数の一致モードに 1 を指定します。
'--- HELLO でも hello でも同じものとして扱う ---
=TEXTAFTER("Hello World", "HELLO", 1, 1)
'--- 結果: World(先頭スペースを含む)
英語のテキストやログファイルで、大文字と小文字の表記がバラバラなときに使います。
Q4. 区切り文字自体も含めて取り出したい場合はどうしますか
TEXTAFTER関数は区切り記号より後ろの部分しか返しません。区切り記号自体も含めたい場合は、抽出後に文字列を結合します。
'--- 区切り記号「@」を結果の先頭に追加する ---
="@" & TEXTAFTER(A2, "@")
'--- 結果: @example.com
ファイルパスからファイル名と拡張子だけを残し、拡張子の前のドットも残したい場合などに使います。
Q5. RIGHT関数とTEXTAFTER関数はどう使い分けますか
RIGHT関数は「文字数指定」、TEXTAFTER関数は「区切り記号指定」と覚えると分かりやすいです。
| 関数 | 抽出基準 | 使いどころ |
|---|---|---|
| RIGHT関数 | 末尾からN文字 | 取り出す文字数が決まっている |
| TEXTAFTER関数 | 区切り記号より後 | 区切り記号の位置で決まる |
固定長データならRIGHT、可変長データならTEXTAFTERが第一候補になります。
Q6. 区切り記号が見つからないときに元の文字列を返したい
第6引数に文字列引数自身を指定します。
'--- 区切り記号がなければ元の文字列を返す ---
=TEXTAFTER(A2, "@", 1, 0, 0, A2)
メールアドレスのチェックで、@が含まれない不正データもそのまま表示して目視確認したい場合に使います。
Q7. TEXTAFTER関数を使うと数式が遅くなりますか
通常の使い方であれば、TEXTAFTER関数のパフォーマンスは十分に高速です。
ただし数万行に対してスピル形式で配列を渡すと、再計算が重くなる場合があります。シートの動作が遅いと感じたら、必要な範囲だけに数式を限定するか、一度コピーして「値の貼り付け」で静的データに変換しましょう。
まとめ
TEXTAFTER関数の使い方をまとめます。実務で迷ったら次のポイントを思い出してください。
- TEXTAFTER関数は 区切り記号より後ろ の文字列を1つの数式で抽出できる
- 必須引数は 文字列 と 区切り記号 の2つだけ
- インスタンス引数 で「何番目の区切り記号より後ろか」を指定できる
- インスタンスに 負の値 を指定すると末尾から数えた位置で抽出できる
- 区切り記号が見つからないときは 第6引数 または IFERROR関数 で代替値を指定する
- TEXTBEFORE関数と組み合わせると 中間の項目 だけ取り出せる
- 全項目を別セルに展開したいときはTEXTSPLIT関数のほうが向く
- 対応バージョンは Excel 2021・Microsoft 365 のみ
メールアドレスのドメイン抽出・ファイル名の取り出し・氏名分割など、文字列処理の定番作業がTEXTAFTER関数なら一行で書けます。RIGHT関数とFIND関数を組み合わせた複雑な数式とはお別れして、シンプルで読みやすい数式に置き換えていきましょう。
