ExcelのTEXTSPLITで文字列を表に分割する方法|空欄と#N/Aも調整

1つのセルに「赤,青;白,黒」のような区切り文字付きデータが入っている場合、ExcelのTEXTSPLIT関数を使えば、カンマを列、セミコロンを行として表形式へ分割できます。

ただし、実際のデータでは「赤,,青」のような連続した区切り文字によって不要な空欄ができたり、行ごとの項目数が違って末尾に#N/Aが表示されたりすることがあります。

この2つは同じ問題ではありません。連続区切りによる空欄はignore_empty、行・列の不足部分はpad_withで調整します。空欄そのものに意味があるデータでは、むやみにignore_emptyをTRUEにしないことも重要です。

目次

TEXTSPLITで1セルの文字列を行・列に分割する

TEXTSPLIT関数の基本構文は次のとおりです。

=TEXTSPLIT(text,col_delimiter,[row_delimiter],[ignore_empty],[match_mode],[pad_with])

主な引数の役割は次のとおりです。

引数役割
text分割する文字列またはセル
col_delimiter列方向へ分割する区切り文字
row_delimiter行方向へ分割する区切り文字
ignore_empty連続する区切り文字による空要素を無視するか
match_mode区切り文字を大文字・小文字を区別して判定するか
pad_with行や列の要素数が足りない部分を何で補うか

たとえばA2セルに次の文字列が入っているとします。

赤,青;白,黒

カンマ,を列区切り、セミコロン;を行区切りとして分割するなら、次の数式です。

=TEXTSPLIT(A2,",",";")

結果は次のような2行2列の表になります。

TEXTSPLITでは、列区切りと行区切りを別々に指定できるため、1セルに格納された簡易的な表データを一度に展開できます。

連続する区切り文字で空欄ができる場合はignore_emptyを確認する

TEXTSPLITで特に混乱しやすいのが、連続する区切り文字です。

たとえばA2セルが次の内容だったとします。

赤,,青;白,,黒

カンマが2つ連続しています。

通常の数式では、連続する区切りの間も1つの要素として扱われるため、空のセルができます。

=TEXTSPLIT(A2,",",";")

不要な空欄を取り除きたい場合は、第4引数のignore_emptyをTRUEにします。

=TEXTSPLIT(A2,",",";",TRUE)

これにより、連続した区切り文字による空要素を無視して分割できます。

空欄に意味がある場合はTRUEにしない

ignore_empty=TRUEが常に正解とは限りません。

たとえば次のデータを考えてみます。

山田,,東京都

この2番目の項目が「部署名」で、部署名が未入力という意味なら、空欄もデータ構造の一部です。

この場合に空欄を無視すると、

山田
東京都

のように後続項目の位置関係が変わってしまいます。

そのため、判断基準は次のようになります。

データの状態ignore_empty
連続区切りが単なる入力上の余分な文字TRUE
空欄が「未入力」「該当なし」などを意味するFALSE
項目の位置そのものに意味があるFALSE

ignore_emptyの既定値はFALSEです。空欄を削除する前に、その空欄が不要なのか、それとも欠損値として必要なのかを確認するのが安全です。

行ごとの項目数が違って#N/Aになる場合はpad_withを使う

ignore_emptyとは別に問題になるのが、行ごとの要素数が揃っていないケースです。

たとえばA2セルが次の内容だったとします。

赤,青;白,黒,黄

1行目は2項目ですが、2行目は3項目です。

=TEXTSPLIT(A2,",",";")

とすると、TEXTSPLITは3列の配列として結果を作る必要があります。そのため、1行目の不足している3列目は既定値の#N/Aで補われます。

イメージすると次の状態です。

#N/A

この#N/Aを空欄に見せたい場合は、第6引数のpad_withに空文字列""を指定します。

=TEXTSPLIT(A2,",",";",FALSE,0,"")

結果は次のようになります。

ここで重要なのは、ignore_emptypad_withは役割が異なることです。

ignore_emptyは元データ内の連続した区切り文字をどう扱うかを指定します。一方、pad_withは分割後の配列で行や列の長さが揃わないとき、不足部分を何で埋めるかを指定します。

空欄と#N/Aの違いを切り分ける

「空白や#N/Aを消したい」という場合でも、原因によって使う引数が変わります。

症状原因調整する引数
赤,,青の中央に空欄ができる連続区切りignore_empty
短い行の末尾に#N/Aが付く行ごとの項目数が違うpad_with
空欄を残したい空欄自体がデータignore_emptyをFALSE
不足部分だけ空白表示にしたい配列の不足部分pad_withを""

まず「元文字列の空要素なのか」「表へ展開した結果の不足部分なのか」を見分けると、数式を直しやすくなります。

ignore_emptyとpad_withを同時に指定する

連続区切りを無視しつつ、行ごとの不足部分も空欄にしたい場合は、両方を指定できます。

たとえば次のようなデータです。

赤,,青;白,黒,黄

次の数式では、連続区切りを無視し、不足部分を空文字列で補います。

=TEXTSPLIT(A2,",",";",TRUE,0,"")

ただし、ignore_empty=TRUEにすると元データの空要素そのものが取り除かれます。

単に「見た目をきれいにしたい」という理由だけでTRUEにせず、元データの項目構造を確認してから指定してください。

複数種類の区切り文字をまとめて指定する

実務データでは、区切り文字が統一されていないこともあります。

たとえば、

赤,青、白

のように、半角カンマ,と読点が混在している場合です。

TEXTSPLITでは、複数の区切り文字を配列定数で指定できます。

=TEXTSPLIT(A2,{",","、"})

カンマと読点のどちらでも列方向へ分割できます。

行区切りも併用するなら、たとえば次のように指定できます。

=TEXTSPLIT(A2,{",","、"},";")

区切り文字の揺れが少数で、あらかじめ種類を把握できている場合に便利です。

ただし、文字列の形式そのものが大きく乱れている場合は、区切り文字を増やし続けるより、元データを整形してから分割したほうが管理しやすくなります。

TEXTSPLITの結果を置く周辺セルは空けておく

TEXTSPLITの結果は、数式を入力した1セルだけに収まるとは限りません。

たとえば2行3列へ分割される文字列なら、その結果を表示するために周囲の複数セルが使われます。

そのため、TEXTSPLITを入力するときは、分割結果が展開される範囲に既存データがない場所を選ぶのが基本です。

特に、元データのすぐ隣へ数式を入れる場合は、右側や下側に別の値が入っていないか確認しておきましょう。

表の大きさが入力内容によって変わる運用では、あらかじめ十分な空き範囲を確保しておくと扱いやすくなります。

TEXTSPLITを使うときによくある失敗

ignore_emptyをTRUEにすれば#N/Aも消えると思っている

ignore_emptyは連続区切りによる空要素を無視する設定です。

行ごとの項目数が異なることによって生じる末尾の#N/Aは、pad_withで調整します。

=TEXTSPLIT(A2,",",";",FALSE,0,"")

のように、第6引数を指定してください。

空欄をすべて不要なデータとして消してしまう

名簿やCSV風データでは、「空欄」という状態自体が意味を持つことがあります。

たとえば、

商品A,,1200

が「商品名、型番、価格」という順番なら、中央の空欄を削除すると「1200」が型番の位置へ移ってしまいます。

項目位置を維持する必要があるデータでは、ignore_emptyをFALSEのまま使います。

行区切りと列区切りを逆に指定する

TEXTSPLITでは、第2引数が列区切り、第3引数が行区切りです。

=TEXTSPLIT(A2,",",";")

なら、

  • ,で右方向へ分割
  • ;で下方向へ分割

という意味です。

結果の向きがおかしい場合は、まず第2引数と第3引数を確認してください。

TEXTSPLITはCSVファイル全体を完全に読み取る機能ではない

TEXTSPLITは、セル内にある文字列を指定した区切り文字で分割する関数です。

単純なカンマ区切りやセミコロン区切りの文字列には便利ですが、一般的なCSVファイルには、引用符で囲まれた値や値の中に含まれるカンマ、改行など、単純な文字分割だけでは正しく処理できないケースがあります。

たとえば、

"東京,本社",営業部,100

のように、値そのものへカンマが含まれているデータを単純に,で分割すると、本来1項目である文字列まで分かれてしまいます。

そのため、TEXTSPLITを「CSVファイルを完全に解析する関数」と考えるのは適切ではありません。

セル内の規則的な区切り文字データを分割する用途と考えると分かりやすいでしょう。

TEXTSPLITを使えるExcelのバージョンを確認する

TEXTSPLITは、Microsoftが案内している対応環境ではExcel for Microsoft 365およびExcel 2024などで利用できます。

Excel 2021以前を含むすべてのExcelで使える関数ではないため、他のPCへブックを渡す場合は利用環境にも注意が必要です。

古いExcelとの互換性が必要な業務では、TEXTSPLITを前提に数式を組む前に、利用者側のExcelバージョンを確認しておきましょう。

空欄と#N/Aは別々に原因を確認する

TEXTSPLITで1セルの区切り文字付きデータを表へ変換するときは、まず列区切りと行区切りを指定します。

=TEXTSPLIT(A2,",",";")

そのうえで、不要な連続区切りがあるならignore_emptyをTRUEにします。

=TEXTSPLIT(A2,",",";",TRUE)

行ごとの項目数が違い、末尾の#N/Aを空欄にしたいならpad_withを指定します。

=TEXTSPLIT(A2,",",";",FALSE,0,"")

ポイントは、連続区切りによる空欄と、配列の不足部分に入る#N/Aを同じものとして扱わないことです。

空欄に意味があるデータではignore_emptyをFALSEのままにし、表示上不要な不足値だけをpad_withで調整します。まず元データの区切り方を確認し、「空要素を消したいのか」「不足部分の表示を変えたいのか」を切り分けてから数式を組むと、意図しない列ずれを防げます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次