いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)文字列を指定した回数ずつ各セルに並べる

 Googleスプレッドシートで、関数を使って文字列を指定した数だけ各セルに並べる方法についてです。

  • REPT関数やSPLIT関数等を用いて文字列を多数のセルに並べることができます。

手順

1つの文字列を指定した回数並べる

f:id:accs2014:20191215221032p:plain:right:w500

 もっとも単純な例です。
 B3セルに文字列が、C3セルに繰り返し回数が記録されています。
 そこでB5セルに次のように入力することで、文字列を回数分だけ縦に並べて表示しています。

=TRANSPOSE(SPLIT((REPT(B3&",",C3)),","))

 REPT関数により文字列にカンマをつけて繰り返してSPLIT関数で分割し、TRANSPOSE関数で縦に並べています。横並びにする場合はTRANSPOSE関数を外してください。
 アプローチとしてはお手軽なものの、REPT関数の制約上、繰り返しが膨大になるとエラーになるので(生成される文字列が32,000字まで)その点は注意する必要があります(以下同様)。

複数の文字列を指定した回数ずつ並べる

f:id:accs2014:20191215221036p:plain:right:w600

 次に、B3:B5に記録されている文字列を、C3セルに記録されている回数ずつ表示させている例です。
 B7セルには次のように入力しています。

=TRANSPOSE(SPLIT(CONCATENATE(ARRAYFORMULA((REPT(B3:B5&",",C3)))),","))

 基本的なつくりは上記の例と同じなのですが、REPT関数に配列を渡していますのでCONCATENATE関数のほかARRAYFORMULA関数も追加されています。

複数の文字列をそれぞれ異なる指定した回数ずつ並べる

 

f:id:accs2014:20191215221040p:plain:right:w600

 最も一般化したパターンです。B3:B5に記録されている文字列を、C3:C5セルに記録されているそれぞれの回数ずつ表示させる例です。
 B7セルには次のように入力しています。

=TRANSPOSE(SPLIT(CONCATENATE(ARRAYFORMULA((REPT(B3:B5&",",C3:C5)))),","))

 REPT関数の引数が「C3」から「C3:C5」に変わっているだけでほかは1つ上の例と同じです。