5万データ以上の時に処理速度がどうなるかはわかりませんが、とりあえず ARRAYFORMULA、QUERY がこのケースでは使えないと思うので、以下を試してみてください。
別シートへ出力の場合は参照先の記述の修正を。
出力後の1列目
=TRANSPOSE(SPLIT(ARRAYFORMULA(TEXTJOIN(,TRUE,REPT(A1:A&",",4))),","))
出力後の2列目
=TRANSPOSE(SPLIT(TEXTJOIN(",",TRUE,B1:E),","))
データ量的に関数の処理だと厳しいようなので GASで出力するコード
ベタな書き方しか出来ないのでfor入れ子で。
GAS
1function dataTolist(){
2 const ss = SpreadsheetApp.getActiveSpreadsheet();
3 const fromSheet = ss.getSheetByName("商品イメージ( T-2-7〜T-2-9)");
4 const toSheet = ss.getSheetByName("商品50%具体化(T-2-13〜T-2-15)");
5 const lastrow = fromSheet.getLastRow();
6 const data = fromSheet.getRange(1,1,lastrow,5).getValues();
7
8 let list =[];
9
10 for(i=0; i<lastrow; i++){
11 for(j=1; j<=4; j++){
12 list.push([data[i][0],data[i][j]]);
13 }
14 }
15 toSheet.getRange(1,1,list.length,2).setValues(list);
16}
以下、Arrayfolmura と Vlookup を使ったバージョン 参考までに。
動きは重いかもです。
出力後の1列目
=ARRAYFORMULA(VLOOKUP(QUOTIENt(SEQUENCE(4*COUNTA('商品イメージ( T-2-7〜T-2-9)'!A1:A),1,4),4),{SEQUENCE(COUNTA('商品イメージ( T-2-7〜T-2-9)'!A1:A)),INDIRECT("'商品イメージ( T-2-7〜T-2-9)'!A1:A"&COUNTA('商品イメージ( T-2-7〜T-2-9)'!A1:A))},2,FALSE))
出力後の2列目
=ARRAYFORMULA(IFERROR(VLOOKUP(A1:A,'商品イメージ( T-2-7〜T-2-9)'!A1:E,MOD(ROW(A1:A)-1,4)+2,FALSE),))
もしA列のデータに重複する値がある場合は 2列目は以下で
=ARRAYFORMULA(VLOOKUP(QUOTIENT(SEQUENCE(4*COUNTA('商品イメージ( T-2-7〜T-2-9)'!A1:A),1,4),4),{SEQUENCE(COUNTA('商品イメージ( T-2-7〜T-2-9)'!A1:A)),INDIRECT("'商品イメージ( T-2-7〜T-2-9)'!B1:E"&COUNTA('商品イメージ( T-2-7〜T-2-9)'!A1:A))},MOD(SEQUENCE(4*COUNTA('商品イメージ( T-2-7〜T-2-9)'!A1:A))-1,4)+2,FALSE))
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/12 02:56
2021/01/12 04:13 編集
2021/01/12 04:29
2021/01/12 05:03
2021/01/12 07:53
2021/01/12 08:03
2021/01/12 09:04