実現したいこと
GASで
scheduleのスプレッドシートにある、
日、名前、金額を連想配列で、取得し
function salaryCalculator() { const ash = SpreadsheetApp.getActiveSpreadsheet() const scd = ash.getSheetByName("schedule") const mgmt = ash.getSheetByName("management") let scdName = [] let mgmtName = [] let scdLastRow = [] let scdSalaryDay = [] //列の最終値をしたから取得 for (let r=2; r<=122; r=r+4) { const lastRowDate = scd.getRange(scd.getMaxRows(),r).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); scdLastRow.push(lastRowDate) } const scdLastRowLen = scdLastRow.length //scheduleから日、名前、金額を連想配列で取得 let d = 1 let x = 0 myLoop:while (d<=122) { while (x<scdLastRowLen) { for (let i=5; i<=scdLastRow[x]; i++) { let scdSalaryDay_tmp = {} let workDay = scd.getRange(1,d).getValue() let staffName = scd.getRange(i,d+1).getValue() if (staffName =="") { continue } else { scdSalaryDay_tmp.day = workDay.toDateString() scdSalaryDay_tmp.name = staffName scdSalaryDay_tmp.value = scd.getRange(i,d+2).getValue() scdSalaryDay.push(scdSalaryDay_tmp) if (i == scdLastRow[x]) { d=d+4 x=x+1 continue myLoop; } } } } }
managementのスプレッドシートにある
日、名前で連想配列内を検索し、日と名前が一緒のものの金額を
managementの名前と日に対応するセルに出力する。
const scdSalaryDayLen = scdSalaryDay.length for (let t=2; t<=32;t++) { for (let i=2; i<=138; i++) { let searchName = mgmt.getRange(i,1).getValue() let searchDay = mgmt.getRange(1,t).getValue() let staffValue = "" for (let s=0; s<scdSalaryDayLen; s++) { if (scdSalaryDay[s].name == searchName && scdSalaryDay[s].day == searchDay.toDateString()) { staffValue = scdSalaryDay[s].value mgmt.getRange(i,t).setValue(staffValue) } } } }
というシステムを作ってるのですが、
scheduleにあるデータが1000程度あるのですが、
処理がタイムアウトしてしまいます。
どうしたら処理速度を上げられるでしょうか。
ご教示いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/05 04:53