シート1から二次元配列で取得したリストを編集した後、条件に一致する行をシート2に
転記しようとしていますが、転記する箇所でエラーになり解決することができず行き詰まっております。
セルを1つ1つ指定すると解決するのですが、できれば1行で転記してしまいたいです。
エラーの箇所 : sh1.getRange(m,1,m,6).setValues(c_list);
ロ グ : [[1班,100012,一二田,一二美,2022/04/15,2022/05/29]]
エラーメッセージ
Exception: The number of rows in the data does not match the number of rows in the range. The data has 1 but the range has 2.
listUp @ alert.gs:41
ソースコード
GoogleAppsScript
1function listUp() { 2 3 let n = 0;//リストの行を数えるカウント変数 4 let m = 2;//転記先の行を数えるカウント変数 5 const bk = SpreadsheetApp.openById("スプレッドシートID"); 6 const sh = bk.getSheetByName("リスト"); 7 const sh1 = bk.getSheetByName("転記用"); 8 9 //★指定列の一番下の行番号を取得する 10 let maxRng = sh.getRange(sh.getMaxRows(), 2); 11 let lastRng = maxRng.getNextDataCell(SpreadsheetApp.Direction.UP); 12 let lastraw = lastRng.getRow(); 13 14 //★日付の変数 15 const day0 = new Date(); 16 const day_30 = day0.setDate(day0.getDate() + 30); 17 const day_45 = day0.setDate(day0.getDate() + 45); 18 19 //★閲覧用シートをクリアして項目名を(1行目、1列目のセル、から1行目、6列目のセル)まで入れる 20 sh1.clearContents(); 21 sh1.getRange(1,1,1,6).setValues([["班","ID","姓","名","期日1","期日2"]]); 22 23 //★表から継続中リストを取得する 24 let list = sh.getRange(2,1,lastraw,15).getValues(); 25 list= list.filter(elm => elm[1] == '継続中'); 26 list= list.map(elm => [elm[11],elm[10],elm[12],elm[13],elm[6],elm[14]]); 27 while(n<list.length){ 28 29 //★もし今日より期日1が30日以内か期日2が45日以内なら 30 if( day_30 >= list[n][4] || day_45 >= list[n][5]){ 31 list[n][4] = Utilities.formatDate(list[n][4],'JST', 'yyyy/MM/dd'); 32 list[n][5] = Utilities.formatDate(list[n][5],'JST', 'yyyy/MM/dd'); 33 c_list = [[list[n][0] + ',' 34 + list[n][1] + ',' 35 + list[n][2] + ',' 36 + list[n][3] + ',' 37 + list[n][4] + ',' 38 + list[n][5]]]; 39 40 //★転記用に班から期日2までを転記 41 sh1.getRange(m,1,m,6).setValues(c_list); 42 //★カウント変数mに1加算して次に書き込むときの転記用の行を1行下に指定する 43 m++; 44 } 45 //★カウント関数nに1加算して継続中リスト次の行を見に行く 46 n++; 47 } 48}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/26 23:08