いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)SPLIT関数で複数種類の区切り文字を指定する

 GoogleスプレッドシートのSPLIT関数で、複数条件(複数種類の区切り文字を設定する)の分割を行う方法についてです。区切り文字の長さが1文字の場合と、2文字以上の場合に分けて紹介します。

  • SPLIT関数の第2引数(区切り文字)に2文字以上の文字列を指定すれば、それに含まれる各1文字が区切り文字となります。全体を1つの区切り文字とすることも可能です。
  • SUBSTITUTE関数やREGEXREPLACE関数を併用することで、2文字以上の複数種類の区切り文字を設定することができます。

区切り文字の長さが1文字の場合

 まずは単純な例です。
 次の画像ではSPLIT関数を使い、B3セルのテキストを「-」と「/」の2種類の区切り文字で分割しています。

 D3セル

=SPLIT(B3,"-/")

 第2引数を「"-/"」としています。このように2文字以上の文字列を指定することで、それに含まれるそれぞれの文字が区切り文字とみなされます。



 次の画像では式を「=SPLIT(B3,"x-")」としています。
 テキスト中に「x-」という部分が1か所ありますのでここだけで区切られるようにも見えますが、実際は「x」と「-」のそれぞれで区切られるので注意が必要です。



 本題からは外れますが、第3引数(各文字での分割)にFALSEを指定すれば、指定した文字列の全体が1つの区切り文字として扱われます。

 D3セル

=SPLIT(B3,"x-",FALSE)


区切り文字の長さが2文字以上の場合

 上記のようなSPLIT関数の仕様では「2文字以上の区切り文字を複数指定する」ということができません。
 そこで次の画像ではSUBSTITUTE関数を併用することにより、「and」と「or」の2種類の文字列を区切り文字として分割しています。

 D3セル

=SPLIT(SUBSTITUTE(B3,"or","and"),"and",FALSE)

 SUBSTITUTE関数により「or」を「and」に置き換えておき、SPLIT関数で「and」を区切り文字に指定することで結果的に「and」と「or」の両方の位置で区切られます。
 最後のFALSEを忘れると「a」と「n」と「d」による分割になるので、テキストに別の「a」「n」「d」が含まれる場合に異なる結果となります。



 ただし区切り文字列の種類が増えるとSUBSTITUTE関数をネストする必要があり面倒になります。
 そこで次の画像ではREGEXREPLACE関数を併用することで「and」「or」「with」の3種の文字列を区切り文字として分割しています。

 D3セル

=SPLIT(REGEXREPLACE(B3,"and|or|with","and"),"and",FALSE)

 REGEXREPLACE関数を使い、3種の文字列をいずれも「and」に統一(一括変換)してしまい、SPLIT関数で「and」を区切り文字に指定しています。もちろん「and|」は省略できますが、あえて残しています。



 次の画像も同じ内容ですが、置き換え先を「_」の1文字にすることで、SPLIT関数の第3引数のFALSEを指定せずに済ませています。

 D3セル

=SPLIT(REGEXREPLACE(B3,"and|or|with","_"),"_")

 ただし元のテキストに「_」が含まれていればそこで分割されてしまいますので、適切な置換先を選ぶ必要が生じます。



 最後に、区切り文字となる文字列をリストから参照する例です。

 F3セル

=SPLIT(REGEXREPLACE(B3,JOIN("|",D3:D5),"_"),"_")

 「JOIN("|",D3:D5)」により、リスト(D3:D5)に含まれる文字列を「|」を挿みつつ結合しています。つまり「and|or|with」という文字列が得られます。これをREGEXREPLACE関数に渡すことで上記の例と同じ結果が得られています。