いきなり答える備忘録

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

(Gスプレッドシート)SPLIT関数の使い方

 Googleスプレッドシートで文字列の分割に重宝するSPLIT関数の使い方についてです。
 ExcelにもTEXTSPLIT関数が導入されましたが、機能には若干の違いがあります。

  • SPLIT関数を使うことで、文字列を(その文字列中に含まれる)区切り文字により区切り、複数のセルに分割することができます。

手順

機能と構文

 SPLIT関数の機能は「区切り文字によりテキスト全体を分割し、複数のセルに出力する」というものです。
 構文は次のとおりで、最大4つの引数を指定できます。

SPLIT(テキスト, 区切り文字[, 各文字での分割, 空のテキストを削除])

 最初の2つの引数が必須となっています。
 以下では2つの引数を使った単純な使用例と、第3・第4引数の設定例、さらに応用例を紹介します。

基本的な使用例

 次の画像ではD3セルに式を入力して、B3セルに入力されている文字列を分割しています。

 D3セル

=SPLIT(B3,"・")

 SPLIT関数の第2引数(区切り文字)として「・」を指定しています。
 これにより文字列中に含まれる「・」を基準として文字列が複数のセルに分割されます。
 区切り文字そのものは取り除かれ、どのセルにも出力されません。


 次の画像では第2引数として2文字の文字列を設定しています。
 このとき、2文字全体が区切り文字になるのではなく、各1文字が区切り文字となります。つまり「・」と「/」がどちらも区切り文字として機能します。

 D3セル

=SPLIT(B3,"・/")

 ちなみにExcelのTEXTSPLITだと文字列全体が1つの区切り文字となります。ちょっとした相違点です。
 ただし、第3引数の設定により第2引数の文字列全体を1つの区切り文字として設定することができます。


 次の画像のD3セルの式の内容は最初の例と同じですが、文字列の内容が異なっています。
 区切り文字「・」が文字列の先頭にあり、また、区切り文字が2つ連続している部分もあります。
 しかし出力は最初の例と同じです。区切ってもそこには何も文字が残らないので、何も出力されないというわけです。
 これもExcelとは異なる挙動ですが、第4引数の設定により、該当する箇所に空白セルを出力させることができます。

第3引数(各文字での分割)の効果と使用例

 第3引数には次の2種の値を指定でき、省略した場合はTRUEを指定したものとみなされます。

効果
TRUE第2引数に含まれる各1文字をそれぞれ区切り文字とする(既定値)。
FALSE第2引数の全体を1つの区切り文字とする。


 TRUEの場合(引数を省略した例)はすでに見ていますので、ここではFALSEを指定した例をみてみます。
 次の画像では第2引数を「"・/"」とし、第3引数をFALSEとしています。これにより「・/」の2文字が1つの区切り文字となる一方、単なる「・」や「/」は区切り文字にならず、文字列は2つのセルに分割される結果となっています。

第4引数(空のテキストを削除)の効果と使用例

 第4引数には次の2種の値を指定でき、省略した場合はTRUEを指定したものとみなされます。

効果
TRUE区切り文字の間(先頭の区切り文字の前、末尾の区切り文字の後を含む)に文字が存在しない場合、それに対応する空白セルを出力しない(既定値)。
FALSE区切り文字の間(先頭の区切り文字の前、末尾の区切り文字の後を含む)に文字が存在しない場合、それに対応する空白セルを出力する。

 ちなみに空白セルというのは空文字列(="")と異なり、未入力のセルと同じ状態のセルを指します。Excelでは関数により空白セルを出力することはできませんが、Googleスプレッドシートでは可能です。


 TRUEの場合(引数を省略した例)はすでに見ていますので、ここではFALSEを指定した例をみてみます。
 次の画像では第2引数を「"・"」とし、第4引数をFALSEとしています。これにより先頭の区切り文字や、連続する区切り文字の部分に対応する空白セルが出力されています。
 CSVのように区切り文字(カンマ)で区切られた何番目なのかによってデータの意味が決まるケースもあるので、そのような場合はこの機能が欠かせません。

応用例

縦に分割する

 SPLIT関数単体では文字列を縦方向に分割することはできませんが、SPLIT関数の結果に対しFLATTEN関数を適用すれば同じことが可能です。

 D3セル

=FLATTEN(SPLIT(B3,"・"))

 FLATTEN関数の代わりにTRANSPOSE関数を使っても同じ結果になります。
 なお、これをさらに応用すれば文字列中に「縦に区切るための区切り文字」と「横に区切るための区切り文字」が混在する場合についても対応できます。詳しくは次の記事で紹介しています。

www.officeisyours.com

セル内改行を区切り文字として分割する

 ここでは、セル内にある改行を区切り文字とみなして分割しています。

 D3セル

=SPLIT(B3,CHAR(10))

 セル内改行は「CHAR(10)」と表すことができるので、これを第2引数に使えばOKです。

分割したn番目の値だけを取り出す

 分割した結果全体ではなく、分割したときのn番目の値だけ欲しいということがあります。
 ここではINDEX関数を併用し、分割した2番目の値だけを取得しています。

 D3セル

=INDEX(SPLIT(B3,"・"),2)

 ところで、何番目なのかはわからないが最後の項目が欲しい、という場合も考えられます。
 ちょっとしたトンチですが、これについては次の記事で紹介しています。

www.officeisyours.com


 この画像では、複数のセルを対象としてSPLIT関数を適用し、それぞれ2番目の値を取得しています。

 D3セル

=INDEX(SPLIT(B3:B5,"・"),,2)

 ARRAYFORMULAが必要なように思われますが、実はなくてもうまくいきます。
 また、上記の例と異なりINDEX関数の第3引数を「2」としていることに注意が必要です。1行だけの配列ではなく行列からの取得になるので、行番号と列番号を区別して指定する必要があります。