5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ExcelにSPLIT関数がないので1セルの数式だけで再現してみた

Last updated at Posted at 2021-12-12

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スプレッドシートより便利な点もあります
セル範囲は指定例に示した通り範囲指定ができるようにしたので、次のように複数セルのカンマ区切り文字から値をリストアップすることができます。
Animation4.gif
数式の最後にあるTRANSPOSE関数をUNIQUE関数に変更すれば、重複なしの値リストを縦にリストアップすることもできます。
Animation6.gif
#解説
数式の仕組みについては、後日解説記載します。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?