- 技術 💻
Excelの文字列抽出関数まとめ 特定の文字以降・まで・間を取り出す
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 |
仕組みは次のとおりです。
SUBSTITUTE(A2,"/",REPT(" ",LEN(A2)))で、「/」を19個の空白(A2 の文字数ぶん)に置き換える- 各項目のあいだが十分に離れるので、
(n-1)*LEN(A2)+1文字目からLEN(A2)文字を切り出すと、n番目の項目と空白だけが入る - 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期連続の黒字決算。