回答編集履歴

3

日本語

2022/10/21 09:45

投稿

Cocode
Cocode

スコア2316

test CHANGED
@@ -1,16 +1,16 @@
1
- GASの処理速度を上げる方法は、**「スプレッドシートとの通信回数を減らす」** ことです。
1
+ GASの実行速度を上げる方法は、**「スプレッドシートとの通信回数を減らす」** ことです。
2
2
 
3
3
  質問者様のコードですと、
4
4
  - 1行ずつ`true / false`を判定し、
5
5
  - 1行ずつ削除していますので、
6
6
  - 例えば200行とも全てtrueだった場合、400回スプレッドシートと通信していることになります。
7
- - 例えば最終の200行目の1つだけがtrueだった場合でも、201回通信しなければなりません。
7
+ - 例えば1行だけがtrueだった場合でも、201回通信しなければなりません。
8
8
 
9
9
  今回私のコードは、
10
10
  - 1回の通信で全行の`true / false`判定を行い
11
11
  - 1行ずつ削除していますので、
12
12
  - 例えば200行とも全てtrueだった場合、合計201回スプレッドシートと通信することになります。
13
- - 例えば最終の200行目の1つだけがtrueだった場合、2回の通信だけで済みます。
13
+ - 例えば1行だけがtrueだった場合、2回の通信だけで済みます。
14
14
 
15
15
  200行全部がtrueともなるとそれでも時間はかかりますが、おそらく質問者様のコードよりは速くなるかと思います。
16
16
 

2

通信回数

2022/10/21 09:16

投稿

Cocode
Cocode

スコア2316

test CHANGED
@@ -4,13 +4,15 @@
4
4
  - 1行ずつ`true / false`を判定し、
5
5
  - 1行ずつ削除していますので、
6
6
  - 例えば200行とも全てtrueだった場合、400回スプレッドシートと通信していることになります。
7
+ - 例えば最終行の200行目の1つだけがtrueだった場合でも、201回通信しなければなりません。
7
8
 
8
9
  今回私のコードは、
9
10
  - 1回の通信で全行の`true / false`判定を行い
10
11
  - 1行ずつ削除していますので、
11
12
  - 例えば200行とも全てtrueだった場合、合計201回スプレッドシートと通信することになります。
13
+ - 例えば最終行の200行目の1つだけがtrueだった場合、2回の通信だけで済みます。
12
14
 
13
- 200行ともなるとそれでも時間はかかりますが、おそらく質問者様のコードよりは速くなるかと思います。
15
+ 200行全部がtrueともなるとそれでも時間はかかりますが、おそらく質問者様のコードよりは速くなるかと思います。
14
16
 
15
17
  ```javascript
16
18
  function delete_duplication(){

1

追記

2022/10/21 09:02

投稿

Cocode
Cocode

スコア2316

test CHANGED
@@ -35,3 +35,11 @@
35
35
  });
36
36
  }
37
37
  ```
38
+
39
+ ---
40
+
41
+ > 繰り返し構文のforの外に、getRangeを出すと良いという情報を目にしましたが、
42
+ 私が書いたコードはまさにこれです。
43
+
44
+ `for()`や`.forEach()`で繰り返し処理を行う前に、
45
+ `sheet.getRange(A列の5行目〜最終行).getValues()`で全行のチェック状況(`trule / false`)をまとめて取得しています。