GoogleのスプレッドシートにはSPLIT関数があるのに、Excelにはなぜないの?って思ったことはありませんか?
区切り文字機能やVBAを使えばできるけど、違う、そうじゃない。GoogleのSPLIT関数のように1セルに入力する関数だけで実現したいんだ!
ググっても出てこないなら自分で考えるしかない!ってことで試行錯誤してみたら実現できたので紹介します。
#紹介すること
「,」(カンマ)などの区切り文字つきで入力されたテキストを、ひとつのセルに入力した数式だけで個別のセルに分割して格納できる方法を紹介します(下図参照)。VBAは使いません。
これでGoogleスプレッドシートのSPLIT関数と同じ使い勝手でいける!
##Excel 2016以前は使えません
今回紹介する方法はスピル機能を使うため Excel 2016 以前のバージョンでは使えません。
Excel 2016 以前で数式のみで実現するには、下図のように中間加工用のセル(B5:B8)と、抽出文字列の番号を指定する補助セル(D4:G4)を使った方法この方法しかなさそうです。
#できたもの
完成版の数式はこちらです。
=LET(sp,[区切り文字],txt,TEXTJOIN(sp,TRUE,[セル範囲]),pre_sp,sp&txt,post_sp,txt&sp,x,FILTER((MID(pre_sp,SEQUENCE(LEN(pre_sp)),1)=sp)*(SEQUENCE(LEN(pre_sp))),(MID(pre_sp,SEQUENCE(LEN(pre_sp)),1)=sp)*(SEQUENCE(LEN(pre_sp)))>0,),y,FILTER((MID(post_sp,SEQUENCE(LEN(post_sp)),1)=sp)*(SEQUENCE(LEN(post_sp))),(MID(post_sp,SEQUENCE(LEN(post_sp)),1)=sp)*(SEQUENCE(LEN(post_sp)))>0,),TRANSPOSE(MID(txt,x,y-x)))
長いですが、式の最初のほうにある [ ] 括りの2箇所を以下のように変更するだけですぐ利用できます!
[区切り文字] -> 区切り文字を指定 (例: ",")
[セル範囲] -> 読み込む対象のセル範囲(例: A1, A1:A5 など)
他の箇所は変更せずそのままで!
##Googleスプレッドシートより便利な点もあります
セル範囲は指定例に示した通り範囲指定ができるようにしたので、次のように複数セルのカンマ区切り文字から値をリストアップすることができます。
数式の最後にあるTRANSPOSE関数をUNIQUE関数に変更すれば、重複なしの値リストを縦にリストアップすることもできます。
#解説
数式の仕組みについては、後日解説記載します。