概要
「カンマ区切りの文字を“配列”として扱いたい」
「1セルに入っている一覧を、行や列に自動展開したい」
「関数の中で『2番目の要素』『3番目の要素』だけ取り出したい」
こういうときに使えるのが TEXTSPLIT 関数で文字列を“配列”に変換する技です。
TEXTSPLIT は
「区切り文字で分割 → 結果を“配列”として返す」
という動き方をします。スピルしてセルに広がるのはもちろん、「配列のまま」他の関数の引数として使うこともできます。
ここでは、「配列って何?」というところから、初心者向けにかみ砕いて説明していきます。
TEXTSPLIT の基本(文字列 → 配列)
TEXTSPLIT の構文
まず書式を確認します。
=TEXTSPLIT(文字列, 列区切り, [行区切り], [無視する空文字], [パディング])
文字列には「分割したい元の文字列(またはセル)」を指定します。
列区切りには「横方向に分ける区切り文字」(例:”,”、”;”、” ” など)を指定します。
行区切りには「縦方向に分ける区切り文字」(例:改行の CHAR(10) など)を指定します。
TEXTSPLIT は、この区切りで文字列を切り分け、その結果を「配列」として返します。
配列というのは「複数の値の集まり」で、スピルすると複数セルに広がり、INDEX などと組み合わせれば「n番目の要素」という形で取り出せます。
文字列を横方向の配列に変換する
カンマ区切りを「1行の配列」にする
例えば A2 に、次のような文字列が入っているとします。
リンゴ,バナナ,みかん,ぶどう
これをカンマで区切って「横方向の配列」にしたいときは、次のように書きます。
=TEXTSPLIT(A2, ",")
この式を B2 に入力すると、結果は B2 から右方向にスピルします。
B2:リンゴ
C2:バナナ
D2:みかん
E2:ぶどう
この「B2:E2 に広がったまとまり」全体が、TEXTSPLIT が返した“配列”です。
見た目はセルの集まりですが、関数的には「1行4列の配列」として扱われます。
文字列を縦方向の配列に変換する
改行区切りを「1列の配列」にする
次に、A2 に改行付きでこんな文字列が入っているとします。
リンゴ
バナナ
みかん
ぶどう
(Alt+Enter で改行した状態)
これを「縦方向の配列」にしたい場合、行区切りに CHAR(10)(改行コード)を指定します。
=TEXTSPLIT(A2, , CHAR(10))
列区切りは空欄のまま、行区切りだけ指定するのがポイントです。
この式を B2 に入れると、B2 から下方向にスピルします。
B2:リンゴ
B3:バナナ
B4:みかん
B5:ぶどう
これが「縦1列の配列」です。
行・列の両方に展開して“2次元配列”にする
簡易CSVを一気に表(配列)にする
A2 に、次のようなテキストが入っているとします。
リンゴ,バナナ,みかん
ぶどう,メロン,スイカ
1行目は「リンゴ,バナナ,みかん」
2行目は「ぶどう,メロン,スイカ」
という構造になっています。
これをそのまま「2行×3列の配列」として表にしたい場合、列区切りと行区切りを両方指定します。
=TEXTSPLIT(A2, ",", CHAR(10))
この式を B2 に入れると、
B2:リンゴ C2:バナナ D2:みかん
B3:ぶどう C3:メロン D3:スイカ
という形でスピルします。
この「2×3 の表全体」が、TEXTSPLIT が返した 2次元配列です。
配列の一部だけを取り出す(INDEX と組み合わせ)
「配列の 2 番目の要素」だけ欲しい場合
TEXTSPLIT の結果は配列なので、そのまま INDEX 関数で「n番目」だけ取り出せます。
例えば、A2 に次の文字列があるとします。
リンゴ,バナナ,みかん,ぶどう
ここから「2番目(バナナ)だけ欲しい」場合、
TEXTSPLIT と INDEX を組み合わせてこう書きます。
=INDEX(TEXTSPLIT(A2, ","), 2)
TEXTSPLIT(A2, “,”) が
{リンゴ,バナナ,みかん,ぶどう} という配列を返し、
INDEX(配列, 2) で 2番目「バナナ」を取り出すイメージです。
この書き方を使うと、「中間セルにスピルさせず、配列の一部だけ直接使う」ことができます。
空要素とパディングの扱い(少し応用)
区切りが連続しているときの「空の要素」
A2 に次のような文字列があるとします。
A,,B,,C
カンマが連続している部分(,,)は「空要素」です。
空要素を無視して「A」「B」「C」だけの配列にしたいときは、
4番目の引数「無視する空文字」に TRUE を指定します。
=TEXTSPLIT(A2, ",", , TRUE)
空要素もきちんと配列に残したいときは FALSE を指定します。
=TEXTSPLIT(A2, ",", , FALSE)
この場合、配列としては {A,””,B,””,C} のような形で扱われます(空文字も要素として存在する)。
例題
問題1
A2 に「リンゴ,バナナ,みかん,ぶどう」という文字列が入っています。
これをカンマ区切りで分割し、横方向の配列としてスピルさせる TEXTSPLIT の式を書いてください。
=TEXTSPLIT(A2, ",")
問題2
A2 に、改行区切りで「リンゴ↵バナナ↵みかん↵ぶどう」という文字列が入っています(Alt+Enter で改行)。
これを縦方向の配列としてスピルさせる TEXTSPLIT の式を書いてください。
(改行コードには CHAR(10) を使ってください)
=TEXTSPLIT(A2, , CHAR(10))
問題3
A2 に次の文字列が入っています。
リンゴ,バナナ,みかん
ぶどう,メロン,スイカ
これを 2行×3列の配列として表に展開する TEXTSPLIT の式を書いてください。
=TEXTSPLIT(A2, ",", CHAR(10))
問題4
A2 に「リンゴ,バナナ,みかん,ぶどう」という文字列が入っています。
TEXTSPLIT で配列に変換した結果の「3番目の要素(みかん)」だけを取り出したいです。
TEXTSPLIT と INDEX を組み合わせた式を書いてください。
=INDEX(TEXTSPLIT(A2, ","), 3)
問題5
A2 に「A,,B,,C」という文字列が入っています。
連続するカンマによる空要素を無視し、「A」「B」「C」だけの配列にして横方向にスピルさせたいです。
TEXTSPLIT の「無視する空文字」を使った式を書いてください。
=TEXTSPLIT(A2, ",", , TRUE)
TEXTSPLIT で「文字列 → 配列」に変換できるようになると、
- 1セルに詰め込まれた情報を一瞬で分解できる
- 配列を INDEX などでつまみ食いできる
- 「テキスト操作」が関数だけで完結する
といった世界が見えてきます。
まずは「TEXTSPLIT でスピルさせる」→「INDEX で一部を取る」の二段構えに慣れていくと、
文字列処理を“配列思考”で組み立てられるようになっていきます。
