「カンマ区切りで1セルに詰め込まれたデータを、列に分けたい」「セル内改行で複数行入っている回答を、行に展開したい」。こういう依頼、地味にうんざりしますよね。1件ずつコピペで分けていたら半日仕事ですし、ミスも混ざります。
SPLIT関数は便利ですが、列方向にしか分割できません。改行で区切られたデータを行に展開したり、CSVっぽい文字列を一発で2次元の表に変えたりするのは苦手です。
そこで頼りになるのが TEXTSPLIT関数 です。列方向だけでなく 行方向にも 分割できて、両方を同時に指定すれば2次元の表もワンショットで作れます。Excel(Microsoft 365)にも同じ名前の関数があるので、両方のツールで使い回せるのも強みです。
この記事ではTEXTSPLIT関数の基本構文から、行方向分割、2次元展開、CSV変換、SPLITとの使い分け、TEXTJOINとの相互変換、よくあるエラーまで実務でそのまま使えるパターンをまるごと紹介していきます。
スプレッドシートのTEXTSPLIT関数とは?基本構文
TEXTSPLIT関数(読み方:テキストスプリット)は、指定した区切り文字で文字列を列方向・行方向に分割する 関数です。関数名は「TEXT(文字列)+ SPLIT(分割する)」に由来します。
NOTE
TEXTSPLIT関数はGoogleスプレッドシートとExcel(Microsoft 365)の両方で使えます。引数の仕様もほぼ同じなので、両方のツールを行き来する方には心強い関数です。Excel 2019以前では使えないので注意してください。
=TEXTSPLIT(文字列, 列の区切り, …) の引数
=TEXTSPLIT(文字列, 列の区切り, [行の区切り], [空を無視], [大小区別], [埋め値])
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 文字列 | 必須 | 分割したい文字列またはセル参照 |
| 列の区切り | 必須 | 列方向(右方向)の区切り文字。行のみ分割する場合は "" を指定 |
| 行の区切り | 任意 | 行方向(下方向)の区切り文字 |
| 空を無視 | 任意 | TRUE: 空の結果を除外 / FALSE(既定): 空セルも保持 |
| 大小区別 | 任意 | 0(既定): 大文字小文字を区別 / 1: 区別しない |
| 埋め値 | 任意 | 行列分割で要素数が揃わないとき不足部分に入れる値(既定は #N/A) |
最低限必要なのは「文字列」と「列の区切り」の2つです。行方向の分割が不要なら、SPLIT関数とほぼ同じ感覚で使えますよ。
TEXTSPLITとSPLITの大きな違い
ここでひとつだけ先に押さえておきたいのが、TEXTSPLITとSPLITの「区切り文字の扱い」の違いです。
=TEXTSPLIT("A-B--C", "--") → 「A-B」「C」 ※区切りは "--" 全体で1つ
=SPLIT("A-B--C", "--") → 「A」「B」「C」 ※"-" 1文字ずつが区切り扱い
SPLITは既定では区切り文字を 1文字ずつバラして 区切りに使います。TEXTSPLITは渡した文字列を そのまま1つの区切り として扱います。「区切りが2文字以上の記号」「区切りに英単語を使う」場面では、TEXTSPLITの方が直感どおりに動きます。
TEXTSPLIT関数の基本的な使い方(列方向に分割)
まずは一番シンプルな、列方向への分割から見ていきます。A1に 東京,大阪,名古屋,福岡 と入っているとします。
=TEXTSPLIT(A1, ",")
結果はこうなります。
| B1 | C1 | D1 | E1 |
|---|---|---|---|
| 東京 | 大阪 | 名古屋 | 福岡 |
カンマを区切り文字に指定するだけで、4つの都市名が右方向に展開されました。SPLIT関数を知っている方には馴染みのある動きですよね。
スペース区切りや、フルネームの分解にも使えます。
=TEXTSPLIT("田中 太郎", " ")
→ 「田中」「太郎」が2つのセルに分かれる
複数文字の区切りもそのまま使えます。たとえば「、」(読点)と「:」(コロン)が混在するデータでも、区切り文字に2文字以上の文字列を指定できるのが強みです。
=TEXTSPLIT("商品A:100, 商品B:200, 商品C:300", ", ")
→ 「商品A:100」「商品B:200」「商品C:300」
「カンマだけ」だと先頭にスペースが残りますが、", "(カンマ+スペース)を区切りにすれば余分なスペースなく分けられます。SPLITで同じことをやるとスペースまで区切り扱いになるので、ここは地味にTEXTSPLITが便利な場面です。
TEXTSPLIT関数で行方向(縦)に分割する
TEXTSPLIT関数の 最大の特長は行方向(下方向)にも分割できる ことです。これはSPLIT関数にはない機能ですよ。
行方向に分割するには、第2引数(列の区切り)を空文字列 "" にして、第3引数(行の区切り)に区切り文字を指定します。
A1に りんご/みかん/ぶどう と入っているとします。
=TEXTSPLIT(A1, "", "/")
結果はこうなります。
| 行 | A列 |
|---|---|
| 1 | りんご |
| 2 | みかん |
| 3 | ぶどう |
データが 下方向に展開 されました。列方向の区切りを空文字列 "" にするのがポイントです。第2引数を省略するとエラーになるので注意してくださいね。
セル内改行で区切られたデータを行に展開する
セル内で Alt + Enter(Macは Option + Enter)の改行で詰め込まれたデータも、TEXTSPLIT関数で行に分割できます。改行コードは CHAR(10) で表します。
=TEXTSPLIT(A1, "", CHAR(10))
A1に「読書(改行)映画(改行)旅行」と入っていれば、3行に展開されます。アンケートの自由回答欄や、メモ帳から貼り付けた箇条書きを表データに変えたいときに重宝しますよ。
TIP
Windowsで作られたCSVだと改行コードが
CHAR(13)&CHAR(10)(CR+LF)になっている場合があります。うまく分割できないときは、まずSUBSTITUTE関数でCHAR(13)を空文字に置換してから渡すと安定します。
行と列の両方向に分割する(2次元の表に展開)
第2引数と第3引数を 同時に指定 すると、1つのセルから2次元の表を一発で作れます。これがTEXTSPLIT関数のいちばんの強みです。
A1に次のようなデータが入っているとします。
東京,100,個/大阪,200,箱/名古屋,150,個
スラッシュで行を分け、カンマで列を分けたい場合の数式はこうです。
=TEXTSPLIT(A1, ",", "/")
結果はこうなります。
| B列 | C列 | D列 | |
|---|---|---|---|
| 1行目 | 東京 | 100 | 個 |
| 2行目 | 大阪 | 200 | 箱 |
| 3行目 | 名古屋 | 150 | 個 |
1セルのデータが3行3列の表に展開されました。CSVデータをサッと表形式にしたいときに最強です。
埋め値(pad_with)で #N/A を防ぐ
行列分割で各行の要素数が異なると、不足部分に #N/A が表示されます。
=TEXTSPLIT("東京,100/大阪", ",", "/")
| B列 | C列 | |
|---|---|---|
| 1行目 | 東京 | 100 |
| 2行目 | 大阪 | #N/A |
2行目は要素が1つしかないため、C列が #N/A になっています。これを避けるには第6引数(埋め値)で代わりの値を指定します。
=TEXTSPLIT("東京,100/大阪", ",", "/", , , "")
第4・第5引数は省略するのでカンマだけ並べます。こうすると #N/A の代わりに空文字列が入ります。0 や "-" を指定することもできるので、用途に合わせて選んでみてください。
実務で使えるTEXTSPLITの活用パターン
ここからは仕事の現場でそのまま使える具体例を紹介します。
CSVデータを表に変換する
テキストファイルからコピーしたCSVデータが1つのセルに入っている場合です。行はセル内改行で区切られ、列はカンマで区切られています。
=TEXTSPLIT(A1, ",", CHAR(10))
これだけで複数行・複数列の表データに変換できます。SPLIT関数だと列方向のみなので、1行ずつ処理する必要がありました。TEXTSPLITなら一発ですよ。
ヘッダー行が含まれていて、見出しと中身を分けたい場合は、複数のセルに分けてからQUERY関数で整形するのもありです。
複数回答アンケートを行に展開する
アンケートの複数回答が「読書, 映画, 旅行」のように1セルにまとまっている場合です。集計やピボットテーブルにかけるには、回答ごとに行を分けたい場面が多いですよね。
=TEXTSPLIT(A2, "", ", ")
第2引数を空文字列、第3引数に「, 」(カンマ+スペース)を指定すると、回答が下方向に展開されます。これを全回答者ぶん繰り返して縦に積めば、回答数の集計やCOUNTIF関数でのカウントがラクになります。
住所を都道府県・市区町村に分解する
住所データを区切り文字で分割するケースです。「東京都-千代田区-丸の内1-1」のようにハイフンで区切られたデータなら、こう書けます。
=TEXTSPLIT(A2, "-")
ただし住所のハイフンが番地にも含まれる場合は、想定外の位置で分かれることがあります。番地を残したいときは、最初の2つだけ取り出すなどの工夫が必要です。
=INDEX(TEXTSPLIT(A2, "-"), 1, 1) → 都道府県
=INDEX(TEXTSPLIT(A2, "-"), 1, 2) → 市区町村
INDEX関数で必要な要素だけを取り出す書き方も覚えておくと便利ですよ。
タグ文字列を行に並べる
「#Excel #VBA #効率化」のようにシャープ区切りのタグ文字列も、TEXTSPLITで分割できます。
=TEXTSPLIT(A2, "", " ")
スペースで行に区切れば、タグごとに集計したり、別シートに転記したりが簡単です。シャープ自体を消したいときは、SUBSTITUTE関数を組み合わせます。
=TEXTSPLIT(SUBSTITUTE(A2, "#", ""), "", " ")
入れ子にすると一発でタグだけの縦リストが完成します。
URLからパス要素を取り出す
URLの「/」区切りも分割できます。https://example.com/blog/2026/01/article のようなURLからパス部分だけ取り出したいときに便利です。
=TEXTSPLIT("blog/2026/01/article", "/")
→ 「blog」「2026」「01」「article」
URL全体を渡すと先頭にスキーム(https:)が入るので、必要に応じてSUBSTITUTE関数やMID関数で前処理してから渡してくださいね。
SPLIT関数との違い・使い分け
TEXTSPLIT関数とSPLIT関数はどちらも文字列分割の関数ですが、得意分野が違います。違いを整理してみました。
| 比較項目 | TEXTSPLIT | SPLIT |
|---|---|---|
| 分割方向 | 列方向 + 行方向 | 列方向のみ |
| 2次元分割 | 対応(列+行) | 非対応 |
| 区切り文字の扱い | 文字列全体を1つの区切りとして扱う | 既定で1文字ずつ区切りとして扱う |
| 1文字ずつ区切る | 非対応 | 第3引数 TRUE で対応 |
| 空セルの扱い | 第4引数で制御(既定 FALSE = 残す) | 第4引数で制御(既定 TRUE = 除く) |
| 大文字小文字 | 第5引数で区別しない設定が可能 | 区別する(変更不可) |
| 埋め値の指定 | 第6引数で指定可能 | なし |
| Excel互換 | あり(Microsoft 365) | なし(スプレッドシート独自) |
使い分けの目安はこちらです。
- 列方向だけ・1区切り文字: どちらでもOK。シンプルにいくならSPLITが軽い
- 区切り文字が2文字以上: TEXTSPLITが直感どおりに動く
- 行方向の分割が必要: TEXTSPLIT一択
- 2次元の表に展開したい: TEXTSPLITの独壇場
- 1文字ずつ区切りたい(例: “a:b;c,d” を3記号で分けたい): SPLITの第3引数 TRUE が便利
- Excelとの互換性が大事: TEXTSPLITならExcelでも同じ式で動く
TIP
既存のSPLIT関数の数式を移行するときは、区切り文字の扱いの違いに注意してください。SPLITで
",;"を渡していた式は「カンマと;のいずれか」で区切る挙動ですが、TEXTSPLITだと「カンマ+セミコロン」の2文字を1つの区切り扱いにします。挙動を合わせたい場合は、TEXTSPLITの第2引数を配列{",", ";"}で渡してください。
TEXTJOIN関数との相互変換(分割と結合のセット)
TEXTSPLIT関数とTEXTJOIN関数は 「分割」と「結合」の逆の関係 にあります。セットで覚えておくと、文字列操作の幅がグッと広がりますよ。
| 操作 | 関数 | やりたいこと |
|---|---|---|
| 分割 | TEXTSPLIT | 「東京,大阪,名古屋」→ 3つのセルに分ける |
| 結合 | TEXTJOIN | 3つのセルを → 「東京,大阪,名古屋」にまとめる |
実際に相互変換してみましょう。
分割(TEXTSPLIT):
=TEXTSPLIT("東京,大阪,名古屋", ",")
→ B1:「東京」 C1:「大阪」 D1:「名古屋」
結合(TEXTJOIN):
=TEXTJOIN(",", TRUE, B1:D1)
→ 「東京,大阪,名古屋」
同じ区切り文字(カンマ)を使えば元の形に戻せます。データの前処理で分割し、後処理で結合するパイプラインを組むときは、この2つを行き来できると効率的です。
なお、スプレッドシート独自のJOIN関数でも結合はできます。ただし空セルを除外できる引数がない分、TEXTJOIN関数のほうが使い勝手はよいですよ。
ARRAYFORMULAで複数行を一括分割する
TEXTSPLIT関数は1セルの分割が基本ですが、複数行のデータを一気に分割したいときは少し工夫が必要です。スプレッドシートの場合、TEXTSPLITをARRAYFORMULAでそのまま囲ってもうまく動きません。各行で結果が複数セルに広がるため、衝突してしまうからです。
実務的には次の方針が安全です。
- 数行〜数十行ぶん: TEXTSPLITをセルごとに貼り付ける(行ごとに展開先がずれない範囲で)
- 大量行をまとめて処理したい: SPLIT関数を ARRAYFORMULAでまとめる
=ARRAYFORMULA(IFERROR(SPLIT(A2:A100, ",")))
行方向に分けたいなら、TEXTSPLITを1セルずつ貼り付けるか、 FLATTEN関数やTOCOL関数と組み合わせてリスト化する方法もあります。やりたい形に応じて関数を選んでみてください。
TEXTSPLIT関数のよくあるエラーと対処法
TEXTSPLIT関数で発生しやすいエラーをまとめました。
| エラー | 原因 | 対処法 |
|---|---|---|
#VALUE! | 列の区切り(第2引数)が未指定 | 第2引数は必須。行のみ分割する場合は "" を指定する |
#N/A | 行列分割で要素数が揃わない | 第6引数(埋め値)に "" や 0 を指定して埋める |
#REF! | 分割結果が隣のセルのデータを上書きしようとした | 展開先に十分な空きセルを確保する |
| 分割されない | 全角・半角の不一致(, と , など) | 区切り文字の全角・半角を確認する。SUBSTITUTEで統一する |
| 大文字小文字で分割されない | 既定で大文字小文字を区別する | 第5引数を 1 にして区別しない設定にする |
| 改行で分割できない | 改行コードがLFではなくCRLF | SUBSTITUTEで CHAR(13) を除いてから渡す |
最も多いのが #N/A エラーです。行列分割で各行の要素数が異なると自動的に #N/A が入る仕組みなので、 第6引数で埋め値を指定する 癖をつけておくと安心です。
=TEXTSPLIT(A1, ",", "/", , , "")
第4・第5引数は省略するのでカンマだけ並べる、という書き方を覚えておけば困りません。
TEXTSPLITが使えないときの代替手段
TEXTSPLIT関数はGoogleスプレッドシートとExcel(Microsoft 365)で使えますが、Excel 2019以前のバージョンでは使えません。社内ファイルが古いExcelで開かれる可能性があるなら、代替手段も覚えておくと安心です。
| やりたいこと | スプレッドシート | Excel 2019以前 |
|---|---|---|
| 列方向の分割 | SPLIT または TEXTSPLIT | データ→区切り位置 / 関数なら LEFT+FIND の組み合わせ |
| 行方向の分割 | TEXTSPLIT | 関数では困難(マクロ推奨) |
| 2次元分割 | TEXTSPLIT | パワークエリ |
スプレッドシートで完結する作業ならTEXTSPLITで十分です。Excelとファイルをやり取りするチームでは、相手のExcelバージョンを確認してから使うのが安全ですよ。
まとめ
スプレッドシートのTEXTSPLIT関数は、 区切り文字で文字列を列方向・行方向・両方向に分割できる 強力な関数です。SPLIT関数では届かなかった「行方向の分割」「2次元展開」がワンショットで書けるのが大きな魅力です。
この記事で紹介したパターンをおさらいします。
- 列方向の分割:
=TEXTSPLIT(A1, ",")でSPLIT感覚に使える - 行方向の分割: 第2引数を
""に、第3引数に区切り文字を指定 - 2次元分割: 第2・第3引数を両方指定して1セルから表を作る
- CSV変換:
=TEXTSPLIT(A1, ",", CHAR(10))で改行+カンマのCSVを表化 - 複数回答アンケート: 第3引数に
", "で回答ごとに行展開 - 埋め値で #N/A 回避: 第6引数に
""や0を指定 - TEXTJOINとセットで覚える: 分割と結合を行き来する前処理に強い
列方向だけの分割ならSPLIT関数でも十分ですが、行方向への分割やCSVデータの2次元展開はTEXTSPLIT関数の出番です。 TEXTJOIN関数との相互変換もセットで覚えておくと、文字列操作の選択肢が一気に増えますよ。
文字列を途中から取り出したいときはMID関数、余分なスペースを整理したいときはTRIM関数、特定文字を別の文字に置き換えたいときはSUBSTITUTE関数も合わせてチェックしてみてください。
