前提
対応日を1つずつ取得して、取得した日付の5営業日前(土日にかぶった場合は金曜日の日付)を
C列に記載するものを書いていたんですが、個数が多くなり、処理時間を短くしたいです。
実現したいこと
B4:Bの数字を一括で取得して、5日前という処理を一括で対応して、土日になった場合は、個別で処理をするという対応にしたいです
発生している問題・エラーメッセージ
function syuryobi_medal() { var dayOfWeekStr = ["日", "月", "火", "水", "木", "金", "土"]; var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート2"); var columnBVals = sheet2.getRange('B:B').getValues(); // B列値を配列で取得 var lastRow = columnBVals.filter(String).length; var now = new Date(); now.setDate(now.getDate()); var d5 = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy-MM-dd '); sheet2.getRange(1, 2).setValue(d5) for (var i = 4; i <= lastRow; i++) { var sheetDate = sheet2.getRange(i, 2); // 日付のセルを読み込む var dt_s = sheet2.getRange(i, 2).getValue(); var sheetDayOfWeek = dayOfWeekStr[sheetDate.getValue().getDay()]; var Friday = dayOfWeekStr[5] var Thursday = dayOfWeekStr[4] var dt = new Date(dt_s); //5営業日前 if (sheetDayOfWeek === Friday) { var dt_5 = dt.setDate(dt.getDate() - 7); var s5 = Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy-MM-dd '); sheet2.getRange(i, 3).setValue(s5) } else if (sheetDayOfWeek === Thursday) { var dt_5 = dt.setDate(dt.getDate() - 6); var s5 = Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy-MM-dd '); sheet2.getRange(i, 3).setValue(s5) } else { var dt_5 = dt.setDate(dt.getDate() - 5); var s5 = Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy-MM-dd '); sheet2.getRange(i, 3).setValue(s5) } } }
該当のソースコード
ソースコード
試したこと
mapで書いたりしましたが、うまく動きませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/14 09:29