実現したいこと
現在1行ずつ処理しているコードを
配列を使用しまとめて処理するコードに改善できればと思っていますが、知識がなく困っております。
現在は5行更新するだけで144461msかかります。
そもそも配列を使用し処理可能なのかを含めご教授いただければ幸いです。
該当のソースコード
function input() { //処理速度計測開始 console.time('test') const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const sheet = spreadsheet.getSheetByName("●●●"); // シートの取得 const lastRow = sheet.getLastRow(); for(let i = 2; i <= lastRow; i++) { const Status = sheet.getRange(i, 1).getValue() if (Status == "●●●") { if(!sheet.getRange(i, 5).getValue()){ //関数の指定 let str = `=SUM(QUERY(IMPORTRANGE("ブックID","シート名"),"select Col● where Col●='"&●${i}&"' and Col● = date '"& TEXT(●${i},"YYYY-MM-DD") &"'",0))` //関数の入力 sheet.getRange(i, 5).setFormula(str); } else { //デバッグ用 console.log(sheet.getRange(i, 1).getValue()); } } //値貼りにする let val = sheet.getRange(i, 5).getValue() sheet.getRange(i, 5).setValue(val) } //処理速度計測終了 console.timeEnd('test') }
追記です。
1度に100行以上を更新する事があるため、処理速度が遅く困っているという主旨になります。
console.time() timeEnd() をもっと入れて、どの行が遅いのか調べられますか?
変数 Status がループ中ずっと固定なのは意図通りですか?
ご連絡ありがとうございます。
console.time() timeEnd() をもっと入れて、どの行が遅いのか調べられますか?
→下記が2000~3000msで最も遅かったです。
let val = sheet.getRange(i, 5).getValue()
その他は5~10ms程度でした。
変数 Status がループ中ずっと固定なのは意図通りですか?
→すみません。ミスです。修正しました。
