(Gスプレッドシート)文字列を1文字ずつ各セルに分割する

 Googleスプレッドシートで、セル内の文字列を1文字ずつセルに分割する方法についてです。
 メニューの「テキストを列に分割」を使っても(区切り文字がないため)うまくいきませんが、関数でなら比較的簡単に実現できます。

MID/SEQUENCE関数を使う方法

 次の画像では、D3セルに数式を入力し、B3セルに入力されている文字列を1文字ずつ分割して横方向に並べています。

 D3セル

=ARRAYFORMULA(MID(B3,SEQUENCE(1,LEN(B3)),1))

 連番を生成するSEQUENCE関数を使い、1から5(=LEN(B3)。文字列の長さ)までの連番を生成しています。それをMID関数の第2引数(抽出開始位置)とすることで1番目から5番目までの文字を1つ1つ抽出しています。
 ただしARRAYFORMULA関数で囲まないと最初の1文字しか抽出できないので注意してください。



 SEQUENCE関数の引数を単に「LEN(B3)」とすれば縦方向に並べることができます。

 D3セル

=ARRAYFORMULA(MID(B3,SEQUENCE(LEN(B3)),1))

 


 このMID/SEQUENCE関数を使う方法は、以降で紹介する方法と比べて式がやや長いのが欠点ですが、数値や日付も見たまま1文字ずつ分割できるのがメリットです。

REGEXEXTRACT関数を使う方法

 ここでは、文字列の抽出を行うREGEXEXTRACT関数を使って分割しています。

 D3セル

=REGEXEXTRACT(B3,REPT("(.)",LEN(B3)))

 REGEXEXTRACT関数は文字列のうち正規表現にマッチする部分を抽出する関数です。
 第2引数(正規表現)を「REPT("(.)",LEN(B3))」としていますが、これは「(.)」を文字の長さだけ繰り返したもの、つまり「(.)(.)(.)(.)(.)」となります。「.」は任意の1文字にマッチし、さらにカッコで囲むことで各セルに分割して抽出されるので、1文字ずつ分割した結果が得られます。



 縦に並べる場合はさらにTOCOL関数で囲みます。

 D3セル

=TOCOL(REGEXEXTRACT(B3,REPT("(.)",LEN(B3))))

 


 ただし数値や日付を直接指定するとエラーになるのが注意点です。
 数値の場合は次のように「&""」をくっつけて文字列に変換してしまえば可能ですが、日付の場合はさらに厄介になるので上記のMID/SEQUENCEの方法を用いるのがよいでしょう。

 D3セル

=REGEXEXTRACT(B3&"",REPT("(.)",LEN(B3)))

SPLIT/REGEXREPLACE関数を使う方法

 ここでは、文字列の置換を行うREGEXREPLACE関数を使って分割しています。

 D3セル

=SPLIT(REGEXREPLACE(B3,"","_"),"_")

 REGEXREPLACE関数で第2引数(置換元)を「""」とすることで、各文字の間に特定の文字(ここでは「_」)を挿むことができます(SUBSTITUTE関数ではこうならない)。あとはSPLIT関数で「_」を区切り文字として文字列を分割すれば、元の文字列が1文字ずつ分割されることとなります。正確にはREGEXREPLACE関数で文字列の先頭と末尾にも「_」が加わりますが分割の際に無視されます。
 なお、はじめから「_」が含まれる文字列には適用できません。置換先の文字は元の文字列にないものを選択する必要があります。
 縦に並べる方法や数値・日付のケースについてはREGEXEXTRACT関数の例と同様です。