概要
「1行のCSV文字列を、セルごとにきれいに分けたい」山田,東京都,30,営業 みたいな1行テキストから、
「山田」「東京都」「30」「営業」を横に展開したい。
そんなときにとても便利なのが TEXTSPLIT 関数です。
特に「カンマ区切りのCSV行を“そのままセルに分解したい”」ときの王道パターンになります。
ここでは、プログラミング初心者でもイメージしやすいように、
CSVを題材に TEXTSPLIT の考え方と実用テンプレートを丁寧に解説していきます。
TEXTSPLIT 関数の基本
TEXTSPLIT は、簡単に言うと
「文字列を“区切り記号”でバラして、セルに自動展開してくれる関数」です。
書式は次の通りです。
=TEXTSPLIT(文字列, 列区切り文字, [行区切り文字], …)
もっとシンプルに使うときは、こう考えてOKです。
=TEXTSPLIT(文字列, "区切り文字")
例えば A2 に
山田,東京都,30,営業
という文字列が入っているとき、
B2 に
=TEXTSPLIT(A2, ",")
と書くと、B2 から右方向に
B2:山田
C2:東京都
D2:30
E2:営業
というふうに、カンマで区切られた要素が、自動的に横並びで展開されます。
これが「CSV行を分解する」基本の動きです。
CSV行を“横に”分解する基本パターン
最も典型的なのが、「1セルの中のCSV行 → 横方向の複数セル」に分解するパターンです。
たとえば A2 に、外部からコピペした1行のCSVが入っているとします。
例:A2001,山田太郎,東京都,30,営業
これを「ID」「名前」「都道府県」「年齢」「部署」として、B2 から右に並べたいときの式はこうなります。
=TEXTSPLIT(A2, ",")
これだけで
B2:001
C2:山田太郎
D2:東京都
E2:30
F2:営業
のように、きれいにカンマごとに区切られます。
ポイントは「区切り文字として "," を指定する」ことだけです。
CSV なら、基本的にはカンマで区切られているので、そのまま使えます。
ヘッダー行や複数行データへの応用
もし A2 にヘッダー行、A3 以降にデータ行が入っているなら、
それぞれの行で TEXTSPLIT を使えば、行ごとにきれいに展開できます。
A2 にID,名前,都道府県,年齢,部署
A3 に001,山田太郎,東京都,30,営業
B2 に
=TEXTSPLIT(A2, ",")
B3 に
=TEXTSPLIT(A3, ",")
として下方向にコピーすれば、
A列に「元テキスト」、B列以降に「分解済みのデータ」という構成になります。
「1セルに1行のCSV」という状態から、
「1行に複数列のシンプルな表」に変換するイメージです。
区切り文字がカンマ以外のパターン
CSV 以外にも、区切りがタブやセミコロンになっていることがあります。
TEXTSPLIT は、区切り文字を変えるだけで対応できます。
タブ区切りなら、区切り文字に CHAR(9)(タブの文字コード)を使います。
例えば、A2 にタブ区切りで
001<TAB>山田太郎<TAB>東京都<TAB>30<TAB>営業
が入っている場合、B2 に
=TEXTSPLIT(A2, CHAR(9))
とすれば、タブごとに分割されます。
セミコロン区切り(;)なら、
=TEXTSPLIT(A2, ";")
と書けばOKです。
重要なのは
「何で区切られているか?」を把握し、それを TEXTSPLIT の第2引数に渡すことです。
ダブルクォーテーション付きCSVへの注意点(概要)
実際のCSVファイルでは、
"山田,太郎",30,"営業部"
のように、項目の中にカンマが含まれるとき、
ダブルクォーテーション " " で囲んでいる場合があります。
TEXTSPLIT 単体では
「中身のカンマ」と「区切りのカンマ」の区別まではしてくれません。
このレベルになると、
Power Query を使う
Office スクリプトやVBAで専用のパース処理を書く
といった“1段階上の方法”の出番になります。
「ひとまず、素直なカンマ区切り(項目内にカンマを含まない)CSV」を前提に、
TEXTSPLIT で分解するところから慣れていくのがおすすめです。
数値や日付として再利用する
TEXTSPLIT で分解した結果は、基本的には「文字列」として扱われます。
ただし、Excel が自動で数値や日付と認識できる形なら、そのまま数値や日付としても扱われます。
もし、「数値として確実に使いたい」なら、VALUE 関数をかませる方法があります。
たとえば、B2 に TEXTSPLIT の結果として「30」が入っている場合、
C2 に
=VALUE(B2)
と書けば、計算に確実に使える数値 30 になります。
日付文字列についても、
=VALUE(B2)
として、セルの表示形式を「日付」に変えることで、日付型に変換できます。
CSV行分解の“型”をひとつにまとめる
CSVの1行をセルに分解する定番の「型」は、次の1行です。
=TEXTSPLIT(A2, ",")
これを
1つのセルに貼られたCSV行(文字列)を
横方向のセルに展開したい場所に入力する
というイメージで使います。
CSVの行が複数あるなら、行ごとに TEXTSPLIT をコピーするか、
水平展開された結果をコピーして値貼り付けする、などで整えていきます。
問題1
A2 に001,山田太郎,東京都,30,営業
という1行のCSV文字列が入っています。
これをカンマごとに分解して、B2 から右方向に展開したいです。
TEXTSPLIT を使った式を書いてください。
=TEXTSPLIT(A2, ",")
問題2
A2 に1001,佐藤花子,大阪府,25,総務
という文字列が入っています。
これを B2 から右に分解して、「1001」「佐藤花子」「大阪府」「25」「総務」と並べたいです。
TEXTSPLIT の式を書いてください。
=TEXTSPLIT(A2, ",")
問題3
A2 にタブ区切りで2001<TAB>高橋一郎<TAB>福岡県<TAB>40<TAB>開発
というデータが入っています(<TAB> は実際にはタブ文字)。
これを TEXTSPLIT で分解して、B2 から右に展開したいです。
区切り文字に CHAR 関数を使った式を書いてください。
=TEXTSPLIT(A2, CHAR(9))
問題4
A2 にID,名前,都道府県,年齢,部署
というヘッダー行のCSV文字列が入っています。
これを B2 から右方向に「ID」「名前」「都道府県」「年齢」「部署」と展開したいです。
TEXTSPLIT を使った式を書いてください。
=TEXTSPLIT(A2, ",")
問題5
A2 に3001,鈴木次郎,愛知県,35,営業
というCSV行が入っています。
TEXTSPLIT で分解したあと、年齢(4番目の要素)を数値として使いたいです。
B2 から右に TEXTSPLIT を使い、D2 に入った年齢を数値化するための式を書いてください。
B2(分解用):
=TEXTSPLIT(A2, ",")
D2(年齢を数値化):
=VALUE(D2)
CSV行の分解は、TEXTSPLIT を知っているかどうかで、作業効率がまるで変わります。
まずは
=TEXTSPLIT(A2, ",")
という“1行の型”を、そのまま指に覚えさせるつもりで使ってみてください。
そこから、区切り文字を変えたり、分解結果を数値や日付に変換したりと、
少しずつステップアップしていけば大丈夫です。
