1つ目に関して
おおよそですが、10秒ほどかかっているようですね。
下記のコードで、大体、5秒くらいになります。
もう少し、速くした方が良いでしょうか?
gs
1function myFunctionpLmJy() {
2 let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
3
4 // C列の値を取得
5 let cRowValues = sheet.getRange("C22:C43").getValues().flat()
6
7 // 処理時間の計測開始
8 console.time("START")
9 Array(21).fill(null).map(function(_, index) {
10 let rowNum = 22 + index
11 if (cRowValues[index] === "") {
12 // J~M列の内容をクリアし、行を非表示
13 sheet.getRange(`J${rowNum}:M${rowNum}`).clearContent()
14 sheet.hideRows(rowNum)
15 }
16 })
17 // 処理時間の計測終了
18 console.timeEnd("START")
19}
2つ目に関して
このように繰り返しすることで簡素化できます。
gs
1function myFunctionrTuI() {
2
3 let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
4
5 // 現状のコードではこのような感じで記載していると仮定しています。
6 // 10回繰り返す
7 // Array(10).fill(null).map(function(_, index) {
8 // let rowNum = 22 + index
9 // sheet.getRange(`K${rowNum}`).setFormula(`=VLOOKUP(C${rowNum},'項目・価格'!B:C,2,FALSE)`)
10 // sheet.getRange(`M${rowNum}`).setFormula(`=J${rowNum}*K${rowNum}`)
11 // })
12
13 // 一括設定用配列
14 let kFormulas = []
15 let mFormulas = []
16
17 Array(10).fill(null).map(function(_, index) {
18 let rowNum = 22 + index
19 // K列の数式
20 kFormulas.push([`=VLOOKUP(C${rowNum},'項目・価格'!B:C,2,FALSE)`])
21 // M列の数式
22 mFormulas.push([`=J${rowNum}*K${rowNum}`])
23 })
24
25 sheet.getRange("K22:K31").setFormulas(kFormulas)
26 sheet.getRange("M22:M31").setFormulas(mFormulas)
27}
実行前 | 実行後 |
---|
| |
補足:
実行後画像の数式が表示されているのは、タブの「表示->表示->数式」にチェックを入れて表示させています。
こちらでは参照先シートがなく、「#REF!」エラーが表示されるため、数式がセットされたか分かりやすくするために表示を変えました。
それと、セルに数式を設定する際、「setFormula」を使用しています。
「setValue」と変わらないので、お好きな方で記載してください。