文字列を分割する「SPLIT関数」の使い方と”応用技”(Googleスプレッドシート)
こんにちは、エドです。
エクセルと似たような使い方ができますが、スプレッドシートにしかない便利な関数がいくつかあります。
その一つが「特定のセルを指定した文字で分割するSPLIT関数」です。
※便利な応用技を見たい方はこちらからどうぞ!
SPLIT関数の概要
SPLIT関数とは、特定のセルの文字列を指定した文字で区切って展開する関数です。
エクセルの「区切り位置の指定」と同じ機能ですが、こちらは関数化することでセルの値が更新された直後に反映させることができます。
A2のセルを変更すると、B、C、D列がすぐに変わる!
※ほかのセルには何もしていません
(エクセルになぜないのか?ってくらい便利です)
SPLIT関数の使い方
*基本的な使い方*
SPLIT([ 分割したい文字列 ] , [ 区切り文字 ] )
区切り文字は””(ダブルコーテーション)で囲みます。
1.文字列を指定した文字(カンマなど)で区切る
こちらの例は関数で「カンマ」でA2のセルを区切っています
B2セルにSPLIT関数を入れ、A2セルを指定して区切り文字を「,」にしています。
C~Dセル(区切られた個数分のセル)は空白にしておきます。
空白にしていない場合はエラーになります(C列に値が入っている)
2.文字列を指定した文字列(2文字以上)で区切る
*区切り文字を2文字以上指定する場合の使い方*
SPLIT([ 分割したい文字列 ] , [ 区切り文字 ] , [ 各文字の分割をする ])
区切り文字は1文字でなくとも構いません。
しかし失敗することがあります
期待した結果はこっちのはず・・・!?
これはSPLIT関数では「文字列を指定した場合各文字ごとに区切る」という仕様のためです。AかBかCで区切られてしまうんですね。
その場合はSPLIT関数で次のように指定します
=SPLIT( A2 , "ABC" , false)
A2の文字列を、ABCで区切ります、各文字ごとに区切りますか?→Noという意味になります。(Yesならtrue、指定しない場合はデフォルトがtrueになります)
無事に区切れました
3.空白行を削除しないで区切る
*空白行も含めて文字列を区切る場合の使い方*
SPLIT([ 分割したい文字列 ] , [ 区切り文字 ] , [ 各文字の分割をする ] , [ 空白行を削除する ])
次のケースを見てみます
普通に区切れているように見えますが・・・
4つに区切られてなきゃおかしいはず!
これはSPLIT関数では「区切った後の文字が空白なら表示しない」という仕様のためです。何もないデータなんだから表示しなくていいだろということですね。
しかしこれはCSVデータなどで表示列数が決まっているときは困ります。
その場合はSPLIT関数で次のように指定します
=SPLIT( A2 , "," , false , false)
A2の文字列を、カンマで区切ります、各文字ごとに区切りますか?→No、空白行は削除しますか?→Noという意味になります。
無事に4つの列に分割できました。
SPLIT関数応用編
便利なSPLIT関数の使い方
1.SPLITで区切った値の〇番目を取得する
通常はSPLITするとすべての分割された値がセルに入ります
ですが以下の方法を使うと、分割されたうちの好きな〇番目の値を取得することができます。
=INDEX(SPLIT( [ 分割したい文字列 ] , [ 区切り文字 ] ), [ 取得したい列番号 ] )
SPLITで分割されたn番目の値を取得する
最小値は1、〇番目の値を取得すると直感的に指定してOKです。
=INDEX(SPLIT( A2 , "/" ),1)
=INDEX(SPLIT( A2 , "/" ),2)
SPLITで分割された最後の列を取得する
=INDEX(SPLIT( A2 , "/" ),COLUMNS(SPLIT( A2 , "/")))
取得する列の番号を指定する部分にCOLUMNS関数を指定しています。これは列数を返す関数なので、以下のように読み解けます。
=INDEX(SPLIT( A2 , "/" ),COLUMNS(SPLITで分割した列数)))
↓
=INDEX(SPLIT( A2 , "/" ),最大の列番号)
※上記の例ではCOLUMNS(SPLIT( A2 , "/") は3が返ります
ちなみにArrayformula関数と組み合わせるとうまくいきません。
それはIndex関数の正式な書式が↓だからです。
=INDEX(SPLIT( [ 分割したい文字列 ] , [ 区切り文字 ] ), [ 取得したい行番号 ],[ 取得したい列番号 ] )
通常1セルだけ指定する場合は、
=INDEX(SPLIT( A2 , "/" ),1)
で取得できますが、正確には
=INDEX(SPLIT( A2 , "/" ),0,1)
と記載する必要があることを覚えておくとよいです。
2.区切った後のセルに書式設定を設定する
普通に区切るとこうなりますが、、、
C列を日付型、D列を通貨型にあらかじめ指定しておけば書式が適用されます。
実はテキストを列に分割では全セルが自動設定になってしまいます。これを
防ぐためにもSPLIT関数は有効です。
3.他の関数と組み合わせる
ArrayFormula関数と組み合わせる
便利な関数にArrayFormula関数があります。
配列を返す関数で、要するに「まとめて関数を適用」できる有用な関数です。
こんな感じで、1セルに値を入れるだけで他のセル表を丸ごと持ってきたりできます
そこにSPLIT関数を指定することもできます。
分割と配列に格納を両方同時にできるんですね。
こんな風に設定すると、1セル関数を入れただけでA列全部に適用できる素晴らしい機能があります。
=ARRAYFORMULA(SPLIT(A1:A," "))
値がないっていない行はエラーになっちゃいますが、それを防止するなら以下のようにします
=ARRAYFORMULA(IFERROR(SPLIT(A1:A," ")))
エラーの場合は何も表示しないという指定を追加することで、値のある行だけSPLITが適用されているように「見せかける」ことができます。
ちなみにARRAYFORMULA(INDEX(SPLIT( A2 , "/" ),2))のような指定はできません!
これはIndex関数がArrayformula関数に対応していないためです。
上記は間違いでした。Index関数の問題ではなく指定方法の間違いでした。
ただしくは
ARRAYFORMULA(INDEX(SPLIT( A2 , "/" ),0,2))
とすることでArrayformula関数と組み合わせることができます。
Vlookup関数と組み合わせる
力技ですが、Vlookup関数を使用する時に、参照元の値の一部と表を突き合わせることもできます。
下の例だと「今日/みかん/100円」のうちSPLITで「みかん」だけ抽出して突合せをしています。
これを応用すると、こんなこともできます。
※広告CSVデータのうち、キャンペーン名だけ取り出してVLOOKUPをあてに行き名称を取得する
一般的には使わない手法ですが、覚えておくと便利な機能だったりしますよ!
以上、SPLIT関数でした!
機会があれば他の機能についても解説してみたいと思います!