(Excel)文字列をカンマ区切りで分割する方法

 Excelで、文字列を文字列中のカンマで区切り、複数セルに分割する方法についてです。
 同様に他の記号や文字で分割することも可能です。

TEXTSPLIT関数を使う方法

 次の画像では、TEXTSPLIT関数を使い、B3セルの文字列をカンマで区切り、横方向のセルに分割しています。

 D3セル

=TEXTSPLIT(B3,",")

 このように第2引数に区切り文字を指定するだけで、文字列を複数セルに分割した結果が得られます(スピル)。



 次の画像は、先頭のカンマや連続するカンマ、カンマがない文字列、空白セルに対する結果を示しています。
 先頭(及び末尾)のカンマや連続するカンマに対しては空白(空文字列)のセルが発生するのが注意点ですが、画像の下の方で示しているように第4引数を「TRUE」とすれば空白が発生しません。


 このほかにも引数が(第6引数まで)存在し、多彩な設定が可能となっています。
 詳しくは次の記事で紹介していますので参考まで。

(Excel)TEXTSPLIT関数の使い方 - いきなり答える備忘録

SUBSTITUTE関数等を使う方法(旧バージョン用)

 TEXTSPLIT関数以外の関数で分割を実現する、というのはなかなか厄介な問題です。
 一部のバージョンではFILTERXML関数による方法も有効ですが、ここではさらに古いバージョンでも利用できる方法を紹介します。


 次の画像では、SUBSTITUTE関数等の各種関数を組み合わせて、B3セルの文字列をカンマで区切り、横方向に分割しています。
 TEXTSPLIT関数の場合と異なり横方向に適宜フィルコピーする必要があるので注意してください。
 また、I3セルでわかるように、余分にフィルコピーするとそのセルは#VALUE!エラーとなります。

 D3セル(I3セルまでフィルコピー)

=REPLACE(
LEFT(","&$B3&",",FIND("★",SUBSTITUTE(","&$B3&",",",","★",COLUMN(A1)+1))-1),1,
FIND("★",SUBSTITUTE(","&$B3&",",",","★",COLUMN(A1))),""
)

 式が非常に長いですが、次のようなことをやっています。

  1. 次の3つの文字列を用意します。
    1. B3セルの文字列の前後にカンマを付けた文字列
    2. 上記aの文字列のうち1番目(COLUMN(A1))のカンマを「★」に置き換えた文字列
    3. 上記aの文字列のうち2番目(COLUMN(A1)+1)のカンマを「★」に置き換えた文字列
  2. FIND関数を使い、上記b,cの文字列中の「★」がそれぞれ何文字目か取得します(それぞれm,n文字目とします)。
  3. 上記aの文字列中の「m+1文字目からn-1文字目」までを取得します。
 横方向にフィルコピーするとCOLUMN関数の値が増えていくので2,3番目のカンマの間、3,4番目のカンマの間…が取得できる、というわけです。
 なおセルの文字列中に「★」が含まれるとうまくいかないので、セルに含まれない文字を選択してください。また、カンマの文字を示す「","」と引数の区切りのカンマ「,」の区別がつきにくいのでご注意ください。



 次の画像は特殊な文字列に対する実行例です。
 #VALUE!エラーは余分に(カンマの数より多く)フィルコピーして発生させているものなので問題はありません。
 しかしTEXTSPLIT関数(第4引数=TRUE)のように空白を出さないようにするのはさすがに困難です。

「区切り位置」メニューを使う方法

 メニュー操作による方法です。
 まずは文字列が入っているセル範囲を選択して、「データ」タブにある「区切り位置」を選択します。

 


 ダイアログが出ますので「コンマやタブなどの~」を選択し、下にある「次へ」のボタンをクリックします。

 


 そしてここでは「コンマ」にチェックを入れます。
 複数種類の記号を選択することもできますし、「その他」のボックスで任意の記号や文字を指定することもできます。
 「次へ」をクリックすると書式に関する設定に進みますが省略します。

 


 完了すると文字列が分割されます。

 


 2つ上の画面中にある「連続した区切り文字は1文字として扱う」にチェックを入れておくと、連続するカンマに対して空白を出力しません。
 ただし先頭にあるカンマに対しては空白が出てしまう(B4セル)のが注意点です。