Excelで特定の文字を目印に文字列を取り出すには、FIND で目印の位置を調べ、LEFT・MID・RIGHT で切り出すのが基本です。 Excel 2024 と Microsoft 365 では、TEXTBEFORE・TEXTAFTER・TEXTSPLIT の3つで同じことを短く書けます。

この記事では、「前・後・間・n番目・最後の区切り以降・全分割」の6パターンを、新しい関数と従来の関数の2通りで並べます。同じ入力に対する結果、どちらを使うかの判断基準、区切り文字が無い行で出るエラーへの対処まで、コピーして使える式でまとめました。

確認環境:LEFT・MID・RIGHT・FIND・SEARCH・SUBSTITUTE などの結果は LibreOffice Calc 24.2.7.2(Linux、ヘッドレス実行)で xlsx ファイルを計算した値です(確認日 2026-10-05)。TEXTBEFORE・TEXTAFTER・TEXTSPLIT は Calc 24.2 に含まれないため、Microsoft サポートの各関数ページの引数仕様どおりの処理を Python 3.11 で行った値を載せ、「※」を付けています(同じ処理で Microsoft のページの使用例と同じ結果になることを確かめています)。

この記事の結論

  • 前を取る:=TEXTBEFORE(A2,"/")/従来は =LEFT(A2,FIND("/",A2)-1)
  • 後を取る:=TEXTAFTER(A2,"/")/従来は =MID(A2,FIND("/",A2)+1,LEN(A2))
  • 最後の区切り以降:=TEXTAFTER(A2,"/",-1)/従来は SUBSTITUTE と REPT を使う式
  • Excel 2021 以前でも開くファイルなら従来の関数、Excel 2024・Microsoft 365 だけで使うなら新しい関数を選びます。
  • 区切り文字が無い行は、従来の式では #VALUE!、新しい関数では #N/A になります。IFERROR か、TEXTAFTER の第6引数で既定値を決めます。

文字列抽出の逆引き早見表(6パターン)

入力は A2 に 総務部/備品/ノートPC/A-1001、A3 に 備品予約(会議室A)受付 が入っている前提です。

やりたいこと 新しい関数(2024/Microsoft 365) 従来の関数(すべてのバージョン) 結果
前(最初の区切りまで) =TEXTBEFORE(A2,"/") =LEFT(A2,FIND("/",A2)-1) 総務部
後(最初の区切り以降) =TEXTAFTER(A2,"/") =MID(A2,FIND("/",A2)+1,LEN(A2)) 備品/ノートPC/A-1001
間(2つの文字の間) =TEXTBEFORE(TEXTAFTER(A3,"("),")") =MID(A3,FIND("(",A3)+1,FIND(")",A3)-FIND("(",A3)-1) 会議室A
n番目(例:3番目) =INDEX(TEXTSPLIT(A2,"/"),3) =TRIM(MID(SUBSTITUTE(A2,"/",REPT(" ",LEN(A2))),(3-1)*LEN(A2)+1,LEN(A2))) ノートPC
最後の区切り以降 =TEXTAFTER(A2,"/",-1) =TRIM(RIGHT(SUBSTITUTE(A2,"/",REPT(" ",LEN(A2))),LEN(A2))) A-1001
全分割(区切りごとに別セル) =TEXTSPLIT(A2,"/") =TRIM(MID(SUBSTITUTE($A2,"/",REPT(" ",LEN($A2))),(COLUMN(A1)-1)*LEN($A2)+1,LEN($A2))) を右へコピー 総務部、備品、ノートPC、A-1001

新しい関数の列の結果は※、従来の関数の列の結果は Calc で計算した値で、6パターンとも同じ結果でした。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Excelの文字列抽出関数まとめ 特定の文字以降・まで・間を取り出す」

新旧どちらを使うか:対応バージョンと判断基準

Microsoft サポートの各関数ページの「適用対象」に基づく対応表です。

関数 Excel 2016/2019/2021 Excel 2024 Microsoft 365
LEFT/MID/RIGHT/LEN 使える 使える 使える
FIND/SEARCH/SUBSTITUTE 使える 使える 使える
TEXTBEFORE - 使える 使える
TEXTAFTER - 使える 使える
TEXTSPLIT - 使える 使える

関数を持たない表計算ソフトでは、関数名を認識できず #NAME? になります(TEXTBEFORE を持たない Calc 24.2 で =TEXTBEFORE("a/b","/") を計算すると #NAME? でした)。そこで、次の基準で選びます。

条件 選ぶもの
Excel 2021 以前でも開くファイル 従来の関数(LEFT/MID/RIGHT+FIND)
使う人全員が Excel 2024 か Microsoft 365 新しい関数(TEXTBEFORE/TEXTAFTER/TEXTSPLIT)
後ろから数えて取りたい・n番目を取りたい 新しい関数が短く書ける。従来の関数では SUBSTITUTE を使う式
区切りごとに全部ばらしたい TEXTSPLIT。従来の関数では右へコピーする式
大文字小文字を区別せずに探したい 新しい関数は第4引数に 1、従来の関数は SEARCH

従来の関数で取り出す(すべてのバージョン)

位置と文字数で切り出す LEFT・RIGHT・MID

まず、目印を使わない基本の3つです。A8 に A-1001 が入っています。

数式 意味 結果
=LEFT(A8,1) 左から1文字 A
=RIGHT(A8,4) 右から4文字 1001
=MID(A8,3,2) 3文字目から2文字 10
=LEN(A8) 文字数 6

特定の文字の位置を調べる FIND

数式 意味 結果
=FIND("/",A2) 最初の「/」の位置 4
=FIND("/",A2,FIND("/",A2)+1) 2つ目の「/」の位置(1つ目の次から探す) 7
=FIND(CHAR(1),SUBSTITUTE(A2,"/",CHAR(1),3)) 3つ目の「/」の位置 13
=LEN(A2)-LEN(SUBSTITUTE(A2,"/","")) 「/」の個数 3

n個目の位置は、SUBSTITUTE の第4引数(何個目を置き換えるか)を使うと式が短くなります。n個目の「/」だけを、文中に出てこない文字(ここでは CHAR(1))に置き換えてから、その文字を FIND で探しています。

前・後・間を取り出す

前      : =LEFT(A2,FIND("/",A2)-1)
後      : =MID(A2,FIND("/",A2)+1,LEN(A2))
後(別解): =RIGHT(A2,LEN(A2)-FIND("/",A2))
間      : =MID(A3,FIND("(",A3)+1,FIND(")",A3)-FIND("(",A3)-1)
1つ目と2つ目の区切りの間:
          =MID(A2,FIND("/",A2)+1,FIND("/",A2,FIND("/",A2)+1)-FIND("/",A2)-1)
入力 取り出し方 結果
総務部/備品/ノートPC/A-1001 前 総務部
総務部/備品/ノートPC/A-1001 後 備品/ノートPC/A-1001
総務部/備品/ノートPC/A-1001 後(別解) 備品/ノートPC/A-1001
備品予約(会議室A)受付 間 会議室A
総務部/備品/ノートPC/A-1001 1つ目と2つ目の区切りの間 備品
tanaka@example.com 前("@" を目印) tanaka
tanaka@example.com 後("@" を目印) example.com

「後」の式で MID の文字数に LEN(A2) を渡しているのは、「残り全部」を取るためです。MID は、指定した文字数が残りより多いときは末尾までを返すので、残りの文字数を計算しなくても済みます。

n番目と最後の区切り以降を取り出す

従来の関数で「後ろから」や「n番目」を取るときは、区切り文字を、元の文字数ぶんの空白に置き換える方法が使えます。

3番目          : =TRIM(MID(SUBSTITUTE(A2,"/",REPT(" ",LEN(A2))),(3-1)*LEN(A2)+1,LEN(A2)))
最後の区切り以降: =TRIM(RIGHT(SUBSTITUTE(A2,"/",REPT(" ",LEN(A2))),LEN(A2)))
最後の区切りまで: =LEFT(A2,FIND(CHAR(1),SUBSTITUTE(A2,"/",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,"/",""))))-1)
取り出し方 結果
3番目 ノートPC
最後の区切り以降 A-1001
最後の区切りまで 総務部/備品/ノートPC

仕組みは次のとおりです。

  1. SUBSTITUTE(A2,"/",REPT(" ",LEN(A2))) で、「/」を19個の空白(A2 の文字数ぶん)に置き換える
  2. 各項目のあいだが十分に離れるので、(n-1)*LEN(A2)+1 文字目から LEN(A2) 文字を切り出すと、n番目の項目と空白だけが入る
  3. TRIM で前後の空白を取り除く

TRIM を使うため、項目の前後にある半角の空白も一緒に取り除かれます。 項目の途中に空白が1つ入った 東京 支社/第2 会議室/A で2番目を取り出すと、結果は 第2 会議室 で、途中の空白は保たれました。

空白に置き換えない別解もあります。最後の「/」だけを CHAR(1) に置き換え、その位置より後ろを取ります。

=MID(A2,FIND(CHAR(1),SUBSTITUTE(A2,"/",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,"/",""))))+1,LEN(A2))

結果は同じ A-1001 でした。

区切りごとに別のセルへ分ける

B2 に次の式を入れて右へコピーすると、1番目、2番目…と順に取り出せます。COLUMN(A1) は右へコピーするたびに 1、2、3…と増えます。

=TRIM(MID(SUBSTITUTE($A2,"/",REPT(" ",LEN($A2))),(COLUMN(A1)-1)*LEN($A2)+1,LEN($A2)))
1列目 2列目 3列目 4列目 5列目
総務部 備品 ノートPC A-1001 (空)

項目の数より右のセルは、エラーではなく空になりました。

取り出した数字を計算に使う

LEFT・MID・RIGHT の結果は文字列です。

数式 結果
=ISNUMBER(RIGHT(A8,4)) FALSE
=VALUE(RIGHT(A8,4)) 1001
=ISNUMBER(VALUE(RIGHT(A8,4))) TRUE

数値として集計や比較に使うときは VALUE で包みます。

新しい関数で取り出す(Excel 2024/Microsoft 365)

TEXTBEFORE と TEXTAFTER の引数

Microsoft サポートのページでは、構文は次のとおりです。2つの関数は引数の並びが同じです。

=TEXTBEFORE(text,delimiter,[instance_num],[match_mode],[match_end],[if_not_found])
=TEXTAFTER(text,delimiter,[instance_num],[match_mode],[match_end],[if_not_found])
番号 引数 意味 省略時
1 text(必須) 検索する文字列。ワイルドカードは使えない
2 delimiter(必須) 目印にする文字列
3 instance_num 何個目の目印を使うか。負の数にすると末尾から数える 1
4 match_mode 0=大文字小文字を区別する、1=区別しない 0
5 match_end 1 にすると文字列の末尾も目印として扱う 0
6 if_not_found 目印が見つからないときに返す値 #N/A を返す

使用例と結果

数式 結果(※)
=TEXTBEFORE(A2,"/") 総務部
=TEXTBEFORE(A2,"/",2) 総務部/備品
=TEXTBEFORE(A2,"/",-1) 総務部/備品/ノートPC
=TEXTAFTER(A2,"/") 備品/ノートPC/A-1001
=TEXTAFTER(A2,"/",-1) A-1001
=TEXTBEFORE(TEXTAFTER(A2,"/",2),"/") ノートPC
=TEXTBEFORE(TEXTAFTER(A3,"("),")") 会議室A
=TEXTAFTER("tanaka@example.com","@") example.com

第3引数に負の数を渡すだけで「後ろから何個目」を指定できるので、最後の区切り以降は =TEXTAFTER(A2,"/",-1) の1つで済みます。

TEXTSPLIT で全部に分ける

=TEXTSPLIT(text,col_delimiter,[row_delimiter],[ignore_empty],[match_mode],[pad_with])
引数 意味 省略時
text(必須) 分割する文字列
col_delimiter(必須) 列方向(右へ)に分ける区切り文字
row_delimiter 行方向(下へ)に分ける区切り文字
ignore_empty TRUE で連続した区切りのあいだの空を無視する FALSE(空のセルを作る)
match_mode 0=大文字小文字を区別する、1=区別しない 0
pad_with 行ごとに項目数が違うときに埋める値 #N/A

=TEXTSPLIT(A2,"/") の結果は、式を入れたセルから右へ「総務部、備品、ノートPC、A-1001」の4セルに広がります(※)。Microsoft サポートのページには、区切り文字が複数あるときは =TEXTSPLIT(A1,{",","."}) のように配列定数で渡すこと、=TEXTSPLIT("1,2,3;4,5,6",",",";") のように行の区切りも渡すと2行3列に分かれることが載っています。

n番目だけほしいときは INDEX と組み合わせます。=INDEX(TEXTSPLIT(A2,"/"),3) は「ノートPC」です(※)。

FIND と SEARCH の違い

位置を調べる関数には FIND と SEARCH があります。A6 に NotePC-pc、A7 に A*B を入れて比べました。

比べる点 FIND SEARCH
大文字と小文字 区別する 区別しない
ワイルドカード(? と *) 使えない(その文字そのものを探す) 使える
見つからないとき #VALUE! #VALUE!
数式 結果 補足
=FIND("pc",A6) 8 小文字の pc だけに一致
=SEARCH("pc",A6) 5 大文字の PC にも一致するので先に見つかる
=FIND("PC",A6) 5
=SEARCH("N*-",A6) 1 「N で始まり - まで」にワイルドカードで一致
=FIND("N*-",A6) #VALUE! * を文字として探すため見つからない
=FIND("*",A7) 2 * という文字の位置
=SEARCH("*",A7) 1 * は「任意の文字列」として働く
=SEARCH("~*",A7) 2 ~ を前に付けると * という文字を探せる
=SEARCH("x",A6) #VALUE! 見つからない

「/」や「@」のような記号を目印にするなら FIND、? や * を含む文字を探すときは FIND か、SEARCH で ~ を付けると覚えておくと迷いません。Microsoft サポートの SEARCH のページにも、大文字小文字を区別したいときは FIND を使うこと、? は任意の1文字、* は任意の文字列、~ を前に付けるとその文字そのものを探せることが書かれています。

区切り文字が無い行のエラーと対処

従来の関数では #VALUE!

A5 に、区切り文字の無い 総務部 が入っているとします。

数式 結果
=LEFT(A5,FIND("/",A5)-1) #VALUE!
=MID(A5,FIND("/",A5)+1,LEN(A5)) #VALUE!
=IFERROR(LEFT(A5,FIND("/",A5)-1),A5) 総務部
=IFERROR(LEFT(A5,FIND("/",A5)-1),"") (空)
=IFERROR(MID(A5,FIND("/",A5)+1,LEN(A5)),"区切りなし") 区切りなし
=LEFT(A5,FIND("/",A5&"/")-1) 総務部
=IF(ISNUMBER(FIND("/",A5)),"あり","なし") なし

FIND が目印を見つけられないと #VALUE! を返し、それを受け取った LEFT や MID も #VALUE! になります。対処は3通りです。

対処 式の形 向いている場面
IFERROR で既定値を返す =IFERROR(式,既定値) 区切りが無い行は元の値や空にしたい
検索する側に区切りを足す FIND("/",A5&"/") 「区切りが無ければ全体を返す」でよいとき。IFERROR なしで書ける
先に有無を調べる =IF(ISNUMBER(FIND("/",A5)),…,…) 区切りの有無で処理を分けたい

新しい関数では #N/A と第6引数

Microsoft サポートの TEXTBEFORE・TEXTAFTER のページには、エラーについて次のように書かれています。

状況 返る値
delimiter が text に含まれない #N/A
instance_num が、text の中の delimiter の個数より大きい #N/A
instance_num が 0、または text の文字数より大きい #VALUE!

この #N/A は、第6引数(if_not_found)か第5引数(match_end)で変えられます。

数式 結果(※) 補足
=TEXTAFTER(A5,"/") #N/A 区切りが無い
=TEXTAFTER(A5,"/",,,,"区切りなし") 区切りなし 第6引数で既定値を指定
=TEXTBEFORE(A5,"/",,,1) 総務部 第5引数を 1 にすると末尾を区切りとして扱い、全体が返る
=TEXTAFTER(A5,"/",,,1) (空) 末尾を区切りとして扱うので、その後ろは空
=TEXTAFTER(A2,"/",5) #N/A 「/」は3個しか無い

第3〜第5引数を省くときは、カンマだけを並べて位置を合わせます。=TEXTAFTER(A5,"/",,,,"区切りなし") はカンマが5つで、最後が第6引数です。

IFERROR と第6引数の選び方

条件 選ぶもの
従来の関数の式 IFERROR、または FIND("/",A5&"/")
新しい関数で「見つからない」だけを置き換えたい 第6引数(if_not_found)
新しい関数で「区切りが無ければ全体を返す」 TEXTBEFORE の第5引数を 1
どんなエラーでもまとめて置き換えたい IFERROR

IFERROR は、関数名の入力違いで出る #NAME? などもまとめて置き換えます。式が正しく動くことを確かめてから IFERROR で包むと、原因を見つけやすくなります。

確かめて分かったこと

  • 6パターンすべてで、新しい関数と従来の関数の結果が一致した:従来の関数だけでも同じ取り出しができます。
  • MID の文字数は多めに渡してよい:LEN(A2) を渡すと末尾までが返り、残りの文字数を計算する必要がありませんでした。
  • SEARCH は大文字の PC にも一致する:NotePC-pc から pc を探すと、FIND は 8、SEARCH は 5 でした。
  • * を探すときは関数で結果が変わる:A*B に対して FIND は 2、SEARCH は 1(ワイルドカードとして働く)、SEARCH で ~* と書くと 2 でした。
  • 空白に置き換える式は、項目数より先を指定しても空が返る:5番目を指定してもエラーにならず、空でした。
  • 取り出した数字は文字列:ISNUMBER は FALSE で、VALUE で包むと TRUE になりました。

よくある質問

Q. Excelで特定の文字以降を抽出するには? A. =MID(A2,FIND("/",A2)+1,LEN(A2)) です。Excel 2024 と Microsoft 365 では =TEXTAFTER(A2,"/") でも同じ結果になります。

Q. 特定の文字までを抽出するには? A. =LEFT(A2,FIND("/",A2)-1) です。FIND で目印の位置を調べ、その1つ手前までを LEFT で取ります。新しい関数では =TEXTBEFORE(A2,"/") です。

Q. FIND と SEARCH の違いは何ですか? A. FIND は大文字小文字を区別し、SEARCH は区別しません。SEARCH は ? と * をワイルドカードとして扱うので、記号そのものを探すときは FIND が向いています。

Q. TEXTAFTER が使えない(#NAME? になる)ときは? A. 使っている Excel が TEXTAFTER に対応していないバージョンの可能性があります。Microsoft サポートのページでは、適用対象は Microsoft 365 と Excel 2024 です。=MID(A2,FIND("/",A2)+1,LEN(A2)) のように従来の関数で書き換えます。

Q. 最後の区切り文字より後ろだけを取り出すには? A. =TRIM(RIGHT(SUBSTITUTE(A2,"/",REPT(" ",LEN(A2))),LEN(A2))) です。新しい関数では =TEXTAFTER(A2,"/",-1) と、第3引数に -1 を渡します。

まとめ

  • 基本は FIND で位置を調べ、LEFT・MID・RIGHT で切り出す組み合わせです。
  • Excel 2024 と Microsoft 365 では TEXTBEFORE・TEXTAFTER・TEXTSPLIT で短く書けます。
  • Excel 2021 以前でも開くファイルは従来の関数で書くと、どのバージョンでも同じ結果になります。
  • n番目・最後の区切り以降は、従来の関数では区切りを空白に置き換える式、新しい関数では第3引数で指定します。
  • FIND は大文字小文字を区別し、SEARCH は区別せずワイルドカードが使えます。
  • 区切りが無い行は、IFERROR、FIND("/",A2&"/")、TEXTAFTER の第6引数のどれかで既定値を決めます。

参考・出典

  • Microsoft サポート「TEXTBEFORE function」https://support.microsoft.com/en-us/office/textbefore-function-d099c28a-dba8-448e-ac6c-f086d0fa1b29
  • Microsoft サポート「TEXTAFTER function」https://support.microsoft.com/en-us/office/textafter-function-c8db2546-5b51-416a-9690-c7e6722e90b4
  • Microsoft サポート「TEXTSPLIT function」https://support.microsoft.com/en-us/office/textsplit-function-b1ca414e-4c21-4ca0-b1b7-bdecace8a6e7
  • Microsoft サポート「SEARCH, SEARCHB functions」https://support.microsoft.com/en-us/office/search-searchb-functions-9ab04538-0e55-4719-a72e-b6f54513b495

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Excelの文字列抽出関数まとめ 特定の文字以降・まで・間を取り出す」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?