指定行数分だけ繰り返し表示をしたい場合。それも「1」「2」「3」「1」「2」「3」……ではなく、「1」「1」「1」「2」「2」「2」……としたい時はどうればいいでしょうか。
これが1列しかない場合は、それほど難しくないです。例えば4行繰り返したい場合なら、
=TOCOL(A:A,SEQUENCE(COUNTA(A:A)),SEQUENCE(,4,,0)))
これでできます。範囲が固定なら、
=LET(r,A1:A5,TOCOL(IFERROR(EXPAND(r,,4),r)))
のようにしてもいいでしょう。
ところが、元の範囲が2列以上ある場合は少し工夫が必要になります。
=WRAPROWS(
TOCOL(INDEX(FILTER(A:B,A:A<>""),SEQUENCE(COUNTA(A:A)),2-MOD(SEQUENCE(,4*2),2))),2
)
もしくは、CHOOSEROWS関数を使うか、REDUCE関数と HSTACK関数を組み合せましょう。
=LET(x,FILTER(A:B,A:A<>""),CHOOSEROWS(x,INT(SEQUENCE(ROWS(x)*4,,4)/4)))
=WRAPROWS
TOCOL(DROP(REDUCE("",SEQUENCE(4),LAMBDA(x,y,HSTACK(x,FILTER(A:B,A:A<>"")))),,1)),2
)
もしクエリでやりたい場合は、カスタム列に繰り返したい数だけリストを作って展開すればいいですね。
let
ソース = Excel.CurrentWorkbook(){[Name="データ範囲"]}[Content],
上位行の保持 = Table.FirstN(ソース, each [Column1]<>null),
リスト列の追加 = Table.AddColumn(上位行の保持, "リスト", each {1..4}, type list),
リスト列の展開 = Table.ExpandListColumn(リスト列の追加, "リスト"),
リスト列の削除 = Table.RemoveColumns(リスト列の展開,{"リスト"})
in
リスト列の削除
意外と簡単です。