🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

ExcelのTEXTSPLIT関数 — テキストを「生きた」スピル配列に分割する

|

ExcelのTEXTSPLIT関数 — テキストを「生きた」スピル配列に分割する

要点TEXTSPLIT は数式版の**「区切り位置」ですが、大きな違いが1つ。結果が 生きた配列で、元が変われば再分割されます。構文は =TEXTSPLIT(テキスト, 列区切り, [行区切り], [空白を無視], [一致モード], [埋める値])。 第2引数は横方向=列へ、第3引数は下方向=行へ分割し、両方を渡すと1つの文字列が 格子になります。つまずきは2つ。結果が**スピルするので、ふさがっていると #SPILL!。 そして複数の区切りには 配列定数 {",", ";"} が必要で、文字列 ",;" ではダメ。 Excel 365 / 2021 以降。

=TEXTSPLIT(A2, ",")
=TEXTSPLIT(A2, ",", ";")          ' カンマで列、セミコロンで行

20年来、"佐藤, さくら, 経理" を別々のセルに分けるには**「区切り位置」**ウィザード—— 一度きりの破壊的な貼り付けで、変わるたびに手で再実行——か、1か月後には誰も読めない LEFTMIDFIND の入れ子が要りました。TEXTSPLIT は1つの式でこれを行い、式 だからこそ分割は生き続けます。

この記事でわかること

  • 列区切り行区切り がどう1つの文字列を2次元の格子に変えるか
  • なぜ複数の区切りは配列定数 {",", ";"} が必要で、",;" ではダメなのか
  • #SPILL! の原因と直し方
  • 埋める値(pad_with)——でこぼこな行を #N/A にしない引数
  • TEXTSPLITLEFT/MID/FIND の山と「区切り位置」を引退させる場面

考え方の軸:「区切り位置」、ただし生きている

「区切り位置」は操作です——実行すると値を一度書いて終わり。元が変わると出力は古く なります。TEXTSPLIT数式です——分割を記述し、ずっと再計算します。「範囲を選んで ウィザードを開いて区切りを選んで完了を押して、来週また」ではなく、式を1つ打てば右 (と下)のセルが自分で埋まり、正しいままです。

' A2 の "佐藤,さくら,経理" が3つのセルにスピル:
=TEXTSPLIT(A2, ",")          ' -> 佐藤 | さくら | 経理

出力はそれらのセルに打ち込まれるのではなく、式のセルからスピルします—— FILTER などの動的配列関数とまったく同じです。

すべての鍵となるルール:列か行か、そして区切りの配列

TEXTSPLIT には区切りの枠が2つあり、どちらを使うかで出力の形が決まります。列区切り (第2引数)はテキストをに分けて列に、行区切り(第3引数)はに分けて行にし ます。両方を渡すと、詰め込まれた1つの文字列が長方形の格子になります。

' "a,b;c,d"  ->  2x2 の格子:カンマが列、セミコロンが行
=TEXTSPLIT(A2, ",", ";")

そして最も時間を食う罠。2つ以上の区切りには、長い文字列ではなく配列定数を 渡します。",;" は「カンマのあとセミコロン」という2文字の単一区切りと読まれ——決して 一致しないため——文字列全体が1セルに落ちます。正しくは:

=TEXTSPLIT(A2, {",", ";", " "})   ' カンマ または セミコロン または 空白で分割
=TEXTSPLIT(A2, ",;")              ' 誤り:リテラル文字列 ",;" を探してしまう

#SPILL! は数式ではなく「隣人」の問題

結果はテキストの数だけ広がるので、TEXTSPLIT はスピル先に空セルが必要です。結果が 占めたい範囲に値・ラベル・結合セルがあると、Excel は配置できず #SPILL! を返します。 式は正しく、ふさがっているのは置き場所です。セルをクリックすると枠でスピル範囲が 示されるので、そこを空ければ結果が現れます。実用のコツ——TEXTSPLIT は右と下に伸び られる場所に置く。既存データの列の隣には置かない。

埋める値:でこぼこな行への対処

ピース数がそろわない多くの行を分割すると——ある住所には建物名の行があり、別の住所には 無い——短い行は #N/A で埋められて返ります。最後の引数 埋める値 が、それを好きな値 に置き換えます。

=TEXTSPLIT(A2, ",", ";", , , "")    ' 足りないセルを #N/A ではなく "" で埋める

飛ばした2つの引数は 空白を無視(連続する区切りをまとめる)と 一致モード1 で 大文字小文字を無視)です。めったに触りませんが、枠の順番を知っておくとカンマがずれま せん。

判断:TEXTSPLIT が旧来の道具に取って代わるとき

文字列を区切りで切るためだけに LEFT/MID/RIGHTFIND と入れ子にしているなら、 やめましょう——脆いパターンで、TEXTSPLIT なら一発、しかも生きたまま。変わるデータに データ ▸ 区切り位置を使っているなら、永遠に再実行する約束をしているのと同じ。 TEXTSPLIT の式は自分で更新します。正直な例外は動的配列関数すべてと同じ——数十万行の 一度きりの取り込みは Power Query の方が軽い。最新であり続けてほしいものはすべて TEXTSPLIT の勝ちです。(分割は結合の逆—— TEXTJOIN を参照。)

ExcelMaster の使いどころ

実務の分割はめったにきれいではありません:フルネームを姓と名に分けて。ただし最初の 空白だけで。住所の残りはまとめたままExcelMaster は、正しい区切りの配列・ 埋める値・明確なスピル位置つきで TEXTSPLIT を日本語の指示から書き、出力先が衝突 しないかも教えます。欲しい形はあなたが説明し、区切りの機構は任せられます。

よくある質問

数式でテキストを列に分割するには?

=TEXTSPLIT(A2, ",") でカンマにより横(列)へ分割します。結果は式の右のセルにスピル し、A2 が変わると更新されます——ウィザードも再実行も不要です。

TEXTSPLITで複数の区切り文字を使うには?

中かっこの配列定数で渡します:=TEXTSPLIT(A2, {",", ";", " "})",; " を文字列で 渡すと失敗します。Excel が3つの別々ではなく、1つの複数文字の区切りとして扱うためです。

TEXTSPLITで#SPILL!が出るのはなぜ?

結果が広がるべきセルを、値・ラベル・結合セルがふさいでいます。式のセルをクリックして スピル範囲を確認し、そこを空ければ結果が現れます。

TEXTSPLITと「区切り位置」はどちらを使う?

TEXTSPLIT は元が変わると再分割する生きた数式。「区切り位置」は静的な値を書く一度 きりの操作で、手で再実行が必要です。変わるデータには TEXTSPLIT。一度きりの一括取り 込みなら「区切り位置」か Power Query で十分です。

TEXTSPLITはExcel 2016や2019で使える?

使えません。TEXTSPLIT は Excel 365 / 2021 以降が必要です。旧版では「区切り位置」か LEFT/MID/FIND の数式を使います。

検証環境

検証環境: Excel 365(Windows 11)— 最終確認 2026-06-17。

関連ガイド: ExcelのTEXTJOIN関数 · ExcelのCONCAT関数 · ExcelのFILTER関数 · VBAのSplit