「CSVを貼り付けたらカンマで区切る作業が毎回発生する」「フルネームを姓と名に分けたい」――そんな繰り返し作業をひとつの数式で片付けてくれるのが TEXTSPLIT関数 です。
Excel 2021・Microsoft 365で追加された比較的新しい関数で、指定した区切り文字でテキストを自動的に分割し、複数のセルに展開できます。
この記事では、TEXTSPLIT関数の読み方から書式、基本的な使い方、複数の区切り文字を扱うテクニック、空白の無視、TEXTBEFORE・TEXTAFTERとの使い分け、エラーへの対処までを順番に解説します。コピペで動く数式と、実務でそのまま使えるシナリオも豊富に紹介します。
TEXTSPLIT関数とは?読み方と何ができるか
「テキストスプリット」と読む
TEXTSPLIT関数は「テキスト スプリット」と読みます。英語の TEXT(テキスト)+ SPLIT(分割する) が語源で、文字どおり「テキストを分割する関数」です。
VBA経験者にはおなじみの Split 関数のワークシート関数版、と考えるとイメージしやすいでしょう。区切り文字を指定して、ひとつのセルに入っている文字列を複数のセルに展開してくれます。
TEXTSPLIT関数でできること
指定した 区切り文字(デリミタ) でテキストを分割し、隣接するセルにスピル(自動展開)させるのが TEXTSPLIT 関数の役割です。具体的には次のようなことが1つの数式でできます。
- カンマ・スペース・スラッシュなど任意の文字で分割する
- 複数の区切り文字を同時に指定して分割する
- 列方向(横)だけでなく行方向(縦)にも展開する
- 区切り文字が連続したときの空セルを残すか無視するか選ぶ
- 大文字と小文字を区別するかどうかを切り替える
- 空セルの代わりに任意の代替文字列を表示する
これまで「データ → 区切り位置」メニューで手動分割していた処理や、LEFT・RIGHT・MID・FIND を組み合わせて作っていた巨大な数式が、TEXTSPLIT 関数1本に置き換えられます。
対応バージョンと利用条件
TEXTSPLIT 関数は次の環境で利用できます。
- Excel for Microsoft 365(Windows / Mac)
- Excel 2021(Windows / Mac)
- Excel for the web
一方で、Excel 2019以前のバージョンでは使用できません。社内環境がOffice 2019やOffice 2016中心の場合は、提出先のExcelバージョンも事前に確認しておきましょう。
バージョン非対応の環境で開くと、数式が「#NAME?」エラーになる、あるいは値だけが残って数式が消えるケースがあります。
「データ → 区切り位置」メニューとの違い
似た機能に「データ → 区切り位置」メニューがありますが、両者には決定的な違いがあります。区切り位置メニューは その時点でのデータを一度だけ変換する操作 です。元のデータが更新されても、変換結果は自動では追従しません。
TEXTSPLIT 関数は 元のセルの値が変わると自動で再計算される数式 です。マスター側のデータが更新されたら、分割結果も自動で書き換わります。継続的に運用するシートでは TEXTSPLIT が圧倒的に楽です。
TEXTSPLIT関数の書式と引数
基本構文
TEXTSPLIT 関数の構文は次のとおりです。
=TEXTSPLIT(文字列, 列の分割記号, [行の分割記号], [空セルの無視], [大文字小文字], [代替文字列])
必須引数は 文字列 と 列の分割記号 の2つ、残りはすべて省略可能です。シンプルな分割であれば最初の2引数だけで完結します。
引数の一覧表
各引数の役割を表でまとめます。実務で迷ったらまずこの表に戻ってきてください。
| 引数 | 必須/任意 | 役割 | 指定する値 |
|---|---|---|---|
| 文字列 | 必須 | 分割したい元の文字列 | セル参照(A1など)または文字列リテラル |
| 列の分割記号 | 必須 | 列方向(横)に分割する区切り文字 | “,” ” ” “/” など。配列 {",","/"} で複数指定可 |
| 行の分割記号 | 任意 | 行方向(縦)に分割する区切り文字 | 改行(CHAR(10))や任意の文字。省略時は列のみで分割 |
| 空セルの無視 | 任意 | 区切り文字が連続したときの動作 | FALSE(既定)=空セルを残す/TRUE=詰めて表示 |
| 大文字小文字 | 任意 | 区切り文字の大小判定 | FALSE(既定)=区別する/TRUE=区別しない |
| 代替文字列 | 任意 | 空セルに表示する文字列 | 任意の文字列。省略時は #N/A が入る |
引数を省略するときのコツ
第3引数以降をスキップして第4・第5引数だけ指定したい場合は、間の引数を空白のままカンマだけ書きます。たとえば「列はカンマで分割、空セルは無視」したいときは次のように書きます。
=TEXTSPLIT(A1, ",", , TRUE)
第3引数(行の分割記号)の位置をカンマ2つで飛ばしているのがポイントです。引数の順番を間違えるとエラーや想定外の結果になりやすいので、複雑になってきたら数式バーで色分け表示を確認しましょう。
TEXTSPLIT関数の基本的な使い方
例1:カンマ区切り文字列を1行に展開する
もっともシンプルな例から始めます。A1セルに 東京,大阪,名古屋 が入っているとします。B1セルに次の数式を入力します。
=TEXTSPLIT(A1, ",")
すると B1 に「東京」、C1 に「大阪」、D1 に「名古屋」が自動で展開されます。スピル機能により、数式は B1 にしか入力していないのに 3 セル分の結果が表示されます。
CSVデータをコピペしたままの「1セルに全部入っている」状態から、Excelで扱いやすい形に瞬時に変換できます。
例2:スペース区切りで姓名を分割する
社員名簿の「田中 太郎」のような氏名を姓と名に分けたいときも TEXTSPLIT が便利です。A1セルが 田中 太郎 の場合、B1に次の数式を入力します。
=TEXTSPLIT(A1, " ")
B1 に「田中」、C1 に「太郎」が展開されます。スペースの種類が 半角スペース か 全角スペース かは元データに合わせて指定してください。両方が混在する場合の対処法は後述します。
LEFT・RIGHT・FIND を組み合わせた従来の数式と比べてみましょう。
従来の数式(姓): =LEFT(A1, FIND(" ", A1) - 1)
従来の数式(名): =MID(A1, FIND(" ", A1) + 1, 100)
TEXTSPLIT版: =TEXTSPLIT(A1, " ")
数式の長さも可読性もTEXTSPLITの圧勝です。検索文字位置の計算や引数の調整が不要になり、メンテナンスもぐっと楽になります。ExcelのFIND関数の使い方やLEFT関数の使い方も合わせて参照してください。
例3:行方向と列方向の2次元に展開する
第3引数を使うと、行方向にも分割できます。A1セルに りんご,みかん,ぶどう|パン,牛乳,卵 が入っていて、列は「,」、行は「|」で分けたい場合は次のように書きます。
=TEXTSPLIT(A1, ",", "|")
結果は2行×3列の配列としてスピルされます。
| 列1 | 列2 | 列3 |
|---|---|---|
| りんご | みかん | ぶどう |
| パン | 牛乳 | 卵 |
複数行のテキストデータをそのまま表形式に変換できる、TEXTSPLITならではの機能です。
例4:セル内改行で行分割する
ひとつのセルに Alt + Enter で複数行のテキストが入っているケースもよくあります。改行コードは Windows 版 Excel では CHAR(10) で表現できます。
=TEXTSPLIT(A1, , CHAR(10))
列の分割記号は不要なので空欄、行の分割記号に改行コードを指定すれば、改行ごとに別の行へ展開されます。フォームから取得した複数行の問い合わせ内容を、項目ごとに行で並べたいときに重宝します。
TEXTSPLIT関数の使い方|複数の区切り文字を指定する
配列定数 {} を使う
実務のデータは「カンマ区切り」「セミコロン区切り」「スラッシュ区切り」が混在していることがよくあります。TEXTSPLIT は 配列定数 {} を使えば複数の区切り文字を同時に指定できる ので、こうした雑多なデータも一発で整えられます。
=TEXTSPLIT(A1, {",","/"})
東京,大阪/名古屋 のように区切り文字が混じっていても、「東京」「大阪」「名古屋」の3セルに分割されます。書式設定が不揃いなCSVをすぐに使える形に直したいときに役立ちます。
3種類以上の区切り文字を指定する
カンマ・スラッシュ・セミコロン・パイプ・タブなど、想定される区切り文字をすべて配列に並べてしまえば、データの揺れにも対応できます。
=TEXTSPLIT(A1, {",","/",";","|"})
たとえば りんご,みかん;ぶどう|パン/牛乳 も、すべて分割対象になります。受け取ったデータが整っていないときの「とりあえず分割」用としても便利です。
全角文字と半角文字を一度に区切る
日本語データでありがちなのが「区切り文字が全角と半角で混ざる」問題です。配列に全角・半角の両方を入れておけば、まとめて区切れます。
=TEXTSPLIT(A1, {",","、","/","/"})
カンマ(半角)・読点(全角)・スラッシュ(半角)・スラッシュ(全角)すべてを区切り文字として扱えます。Webフォームの自由記入欄や、複数の担当者が手入力した名簿の整形に効きます。
行と列で別々の複数区切りを使う
列の区切りと行の区切り、それぞれに配列を渡すこともできます。
=TEXTSPLIT(A1, {",","/"}, {";","|"})
このように指定すると、列方向はカンマかスラッシュ、行方向はセミコロンかパイプで分割されます。データソースが複数あって表記揺れがある場合の正規化に活躍します。
TEXTSPLIT関数の使い方|空白を無視して分割する
第4引数 TRUE で連続した区切り文字を詰める
カンマ区切りデータには「,,」のように区切り文字が連続しているケースがあります。既定(FALSEまたは省略)では空セルとして残されますが、データを詰めて表示したいときは第4引数に TRUE を指定します。
=TEXTSPLIT("a,,b,c", ",", , TRUE)
| 引数の指定 | 結果 |
|---|---|
| 省略または FALSE | a (空) b c の4セル |
| TRUE | a b c の3セル(空セル無視) |
ログデータや古いシステムの吐き出しCSVでよく見る「カンマだけ並ぶ空欄」を、TEXTSPLIT 一発で詰められます。
列と行で別々に無視設定する
第4引数は配列で渡すこともでき、列方向と行方向で別々の挙動を指定できます。
=TEXTSPLIT(A1, ",", "|", {TRUE, FALSE})
列方向は空セルを無視、行方向は残す、といった細かい制御ができます。複雑な構造化テキストを扱うときに役立ちます。
「位置を保持したい」ケースと「詰めたい」ケースの判断軸
第4引数の TRUE / FALSE は、データの性質で使い分けます。
- FALSE(位置を保持) が向くケース
- 何列目に何のデータが入るかが決まっている場合
- 後続でVLOOKUPやINDEXで特定列を参照する場合
- 元データの欠損も含めて見える化したい場合
- TRUE(詰めて表示) が向くケース
- 区切り文字の数が一定でないログやメモを整形する場合
- 件数の集計やリスト化が目的の場合
- 一覧として並べてから次の処理に渡す場合
大文字小文字を区別せず区切る
第5引数 TRUE を指定すると、区切り文字として指定したアルファベットの大文字・小文字を区別しません。
=TEXTSPLIT("AppleXbananaXcherry", "x", , , TRUE)
「X」も「x」も区切り文字として扱われ、「Apple」「banana」「cherry」に分割されます。区切り文字に英字を使うログ形式(タグ・コードなど)を扱うときに便利です。
空セルに代替文字列を表示する
第6引数を使うと、空セルに表示される #N/A を任意の文字列に置き換えられます。
=TEXTSPLIT("a,,b", ",", , FALSE, , "なし")
結果は a なし b の3セルになります。報告書や定型レポートにそのまま貼り付けたいときの仕上げに使えます。
TEXTSPLIT関数とTEXTBEFORE・TEXTAFTERとの使い分け
3関数の役割の違い
TEXTSPLIT と一緒に追加された関数に TEXTBEFORE関数 と TEXTAFTER関数 があります。3関数はどれも「区切り文字を基準にテキストを扱う」ものですが、出力の形が違います。
| 関数 | できること | 出力 | 使いどころ |
|---|---|---|---|
| TEXTSPLIT | 区切り文字でテキスト全体を分割 | 複数セルにスピル | CSVや区切りデータの一括展開 |
| TEXTBEFORE | 指定文字より前の部分を抽出 | 単一セル | メールの「@」の前のユーザー名だけ欲しい |
| TEXTAFTER | 指定文字より後ろの部分を抽出 | 単一セル | ドメイン部分だけ欲しい |
メールアドレスを例に比較する
A1セルに user@example.com が入っているとき、3関数の結果は次のとおりです。
=TEXTBEFORE(A1, "@") 結果: "user"
=TEXTAFTER(A1, "@") 結果: "example.com"
=TEXTSPLIT(A1, "@") 結果: "user" と "example.com" の2セルにスピル
ユーザー名だけ・ドメインだけが必要なら TEXTBEFORE / TEXTAFTER を使いましょう。両方を別セルに分けたいなら TEXTSPLIT、と覚えると迷いません。
使い分けのフローチャート
実務での判断基準を整理します。
- 抽出したい要素が すべて 必要か?
- YES → TEXTSPLIT
- NO → 2へ
- 必要なのは区切り文字の 前 か 後ろ か?
- 前 → TEXTBEFORE
- 後ろ → TEXTAFTER
- 区切り文字が複数ある場合は、何番目の区切りで切るかを TEXTBEFORE / TEXTAFTER の第3引数で指定可能
既存の関数(LEFT・MID・RIGHT・FIND)との比較
これまでExcelでのテキスト分割は、LEFT・MID・RIGHT に FIND を組み合わせる定番パターンが主流でした。TEXTSPLIT 系の登場により、書く量も読みやすさも一気に改善します。
| やりたいこと | 旧来の数式 | 新関数 |
|---|---|---|
| @の前を抽出 | =LEFT(A1, FIND("@",A1)-1) | =TEXTBEFORE(A1, "@") |
| @の後を抽出 | =MID(A1, FIND("@",A1)+1, 100) | =TEXTAFTER(A1, "@") |
| カンマ区切り全分割 | 配列数式や複雑な組み合わせ | =TEXTSPLIT(A1, ",") |
旧バージョンとの互換性が必要な場合は LEFT・MID・FIND を残しましょう。Microsoft 365 環境では TEXTSPLIT 系に統一すると、ファイルがすっきりします。「特定の文字を置き換える」目的なら、SUBSTITUTE関数を併用する選択肢もあります。
TEXTSPLIT関数でよくあるエラーと対処法
#NAME? エラー:関数名がない
「#NAME?」と表示される場合、まずは TEXTSPLIT 関数自体が使えるバージョンかどうか を確認します。Excel 2019 以前では TEXTSPLIT 関数は存在しないため、関数名のタイプミスとして扱われ #NAME? が返ります。
原因: Excel 2019以前で使用 / 関数名のスペルミス
対処: Microsoft 365 または Excel 2021以降に更新 / スペル確認
職場と自宅でバージョンが違うケースや、共有先がOffice 2019のままだと数式が壊れます。配布前にバージョン要件を共有しておきましょう。
#VALUE! エラー:引数の型が不正
第1引数に数値や日付シリアル値をそのまま渡すと #VALUE! になることがあります。明示的に文字列化してから渡すと安定します。
=TEXTSPLIT(TEXT(A1, "0"), ",")
セルの書式を「文字列」に変えるか、TEXT() 関数で文字列に変換するのが定番の対処です。
#SPILL! エラー:スピル先にデータがある
TEXTSPLIT はスピル関数なので、結果が展開される範囲に既存のデータがあると #SPILL! エラーになります。
原因: 展開先のセルにデータ・数式・結合セル・テーブル列が干渉している
対処: 展開先の範囲を空にする / テーブルの場合はテーブルを範囲解除する
特に セルの結合 と テーブル機能 がスピルを妨げやすい原因です。スピル範囲のうしろに別の表を配置している場合は、表の位置を見直しましょう。
#N/A:空セルに代替を指定していない
第4引数を FALSE のまま使い、区切り文字が連続した場合、その位置に #N/A が表示されます。これは仕様どおりの挙動です。#N/A の表示が不自然に見えるレポートでは、第6引数で代替文字列を指定するのがおすすめです。
=TEXTSPLIT(A1, ",", , FALSE, , "-")
「-」「該当なし」「(空欄)」など、用途に合わせて使い分けましょう。
結果が想定と違う:区切り文字の混在に注意
「ちゃんと書いたのに分割されない」というケースの多くは、区切り文字の種類違い が原因です。
- 半角カンマ(,)と全角カンマ(,)が混ざっている
- 半角スペース( )と全角スペース( )が混ざっている
- スラッシュ(/)とバックスラッシュ()が混ざっている
データ側を統一するか、TEXTSPLIT の第2引数を配列にして両方指定する、のどちらかで対処します。
=TEXTSPLIT(A1, {" "," "})
これで全角・半角のスペースが混在していても、まとめて分割できます。
TEXTSPLIT関数のよくある質問(FAQ)
Q1. TEXTSPLITはExcel 2019でも使えますか?
使えません。TEXTSPLIT 関数は Microsoft 365 と Excel 2021 以降 で追加された関数です。Excel 2019 以前のバージョンで開くと #NAME? エラーになります。
職場と取引先でバージョンが揃わない場合は、TEXTSPLIT を使ったあとに値貼り付けで数式を消しましょう。または互換性のある LEFT・MID・FIND の組み合わせを用意しておくと安心です。
Q2. 改行ごとに分割するにはどうしますか?
セル内改行(Alt + Enter で入った改行)で分割するには、行の分割記号に CHAR(10) を指定します。
=TEXTSPLIT(A1, , CHAR(10))
列の分割記号は不要なので空欄にします。Mac版で CHAR(13) を使う環境もあるので、結果が出ない場合は両方試してみてください。
Q3. 1セルだけ取り出したい場合はどうしますか?
TEXTSPLIT の結果から特定のセルだけ欲しい場合は、INDEX 関数や CHOOSECOLS 関数で取り出せます。
=INDEX(TEXTSPLIT(A1, ","), 1, 2)
=CHOOSECOLS(TEXTSPLIT(A1, ","), 2)
どちらも「2番目の要素だけ」を取得します。ただし「区切り文字の前または後だけ」が目的なら、TEXTBEFORE / TEXTAFTER のほうがシンプルです。
Q4. 大量の行に対して一括処理できますか?
TEXTSPLIT 自体は単一セルからの分割です。結果が複数セルにスピルする性質上、行方向の一括処理は工夫が必要になります。範囲全体に対して分割したい場合は、各行に TEXTSPLIT を入れるか、Power Query の「列の分割」機能を併用するのが定番です。
固定の列数で分割するケースでは、TEXTSPLIT を含む数式をフィルでコピーすることで対応できます。
Q5. 区切り文字を「正規表現」で指定できますか?
TEXTSPLIT 関数自体は正規表現に対応していません。複雑な条件で分割したい場合は、Microsoft 365 で追加された REGEXEXTRACT や REGEXREPLACE などの正規表現関数との組み合わせが現実的です。
数字部分だけで分割したい、複雑なパターンマッチが必要、といったケースでは正規表現関数のほうが向いています。
Q6. 区切り文字そのものをセルに残したい場合は?
TEXTSPLIT は区切り文字を削除して分割します。区切り文字を残したい場合は、SUBSTITUTE で一度別の文字列に置き換えてから TEXTSPLIT で分割する、という工夫が必要です。
=TEXTSPLIT(SUBSTITUTE(A1, ",", "★,"), "★")
「★,」のように区切り文字の前にマーカーを入れて分割すれば、結果に区切り文字を残せます。SUBSTITUTE の詳しい使い方はSUBSTITUTE関数の使い方を参照してください。
Q7. TEXTSPLITで分割したあと、また結合できますか?
はい。TEXTSPLIT の逆を担うのが TEXTJOIN関数 です。複数セルを区切り文字付きで結合できます。
=TEXTJOIN(",", TRUE, B1:D1)
TEXTSPLIT で分割 → 加工 → TEXTJOIN で再結合、という流れはデータクレンジングの王道パターンです。
まとめ:TEXTSPLIT関数のポイント
TEXTSPLIT 関数のポイントを振り返ります。
- カンマやスペースなど任意の区切り文字で、テキストを 複数セルに自動展開 できる
- 第2引数で列方向の分割、第3引数で行方向の分割を指定できる
- 配列
{}を使えば 複数の区切り文字 を同時に指定できる(全角・半角混在にも有効) - 第4引数
TRUEで 連続した区切り文字の空セルを無視 して詰められる - 第5引数
TRUEで 大文字小文字を区別しない 分割が可能 - 第6引数で空セルの 代替文字列 を指定できる
- Excel 2019以前では使用不可、Microsoft 365 か Excel 2021 以降で利用する
- 一部だけ抽出したいなら TEXTBEFORE・TEXTAFTER、結合したいなら TEXTJOIN と組み合わせる
- 結果がうまく出ないときは、区切り文字の 全角・半角混在 とスピル先の データ干渉 を疑う
CSVデータの整形・氏名分割・住所分割・タグ抽出など、これまで手作業や複雑な数式で対応していた処理が、TEXTSPLIT 1本でぐっとシンプルになります。Microsoft 365 や Excel 2021 を使っているなら、日常の文字列操作に積極的に取り入れてみてください。
