いきなり答える備忘録

Google Workspace(旧G Suite)・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)SPLIT関数で縦・横の区切り文字により縦横に分割する

 GoogleスプレッドシートのSPLIT関数は基本的に文字列を横にしか分割できませんが、少し工夫すれば縦横に分割できます。

  • TEXTSPLIT関数とTRANSPOSE関数(またはFLATTEN関数)を組み合わせれば、文字列を縦区切り文字と横区切り文字に基づいて縦横に分割できます。

手順

 画像中のB3セルが対象となる文字列です。
 D3セルに式を入力することで、文字列中の「@」を縦区切り文字とし、「_」を横区切り文字として分割しています。

 D3セル

=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(B3,"@")),"_"))

 内側の「SPLIT(B3,"@")」で文字列を横方向に分割し、TRANSPOSE関数で縦に並べ替えています(TRANSPOSE関数についてはFLATTEN関数に代えてもOKです)。
 その結果に対し再度「SPLIT(~,"_")」を実行することで、縦に並べたそれぞれの文字列を横に分割しています。
 縦に並べた文字列すべてにSPLITを実行するためにARRAYFORMULAが必要となります。



 対象となる文字列が複数ある場合に、結果を縦にスタックさせることもできます。

 D3セル

=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(JOIN("@",B3:B4),"@")),"_"))

 対象となる文字列を一旦JOIN関数で連結しており、このときに縦区切り文字である「@」を挿んでいます。
 あとは最初の例と同じです。
 ただしJOIN関数で連結した時点で文字数が数万字に達するとエラーになるのが注意点です