回答編集履歴

4

不要なログ表示を削除

2022/04/20 10:16

投稿

退会済みユーザー
test CHANGED
@@ -17,7 +17,6 @@
17
17
  const p_values = p_sh.getRange(col_A + "1:" + p_sh.getLastRow()).getValues();
18
18
  // 'PASTE' 貼り付け日でフィルター
19
19
  const p_filtered = p_values.filter(function (element) {
20
- console.log(element[0].getTime())
21
20
  return typeof element[0] == 'object' && element[0].getTime() == today_GetTime;
22
21
  });
23
22
  // Col並び替え
@@ -28,7 +27,6 @@
28
27
  var found = false;
29
28
  for (var a = 0; a < a_Values.length; a++) { // 'ARR CHECK'
30
29
  if (p_MoveCol[p][3] === a_Values[a][3] && p_MoveCol[p][4] === a_Values[a][4]) {
31
- console.log(p_MoveCol[p])
32
30
  a_sh.getRange(a + 4, 3, 1, 11).setValues([p_MoveCol[p]]);
33
31
  found = true;
34
32
  break;
@@ -39,7 +37,6 @@
39
37
  if (!found) {
40
38
  a_sh.appendRow(['', '', ...p_MoveCol[p]]);
41
39
  }
42
-
43
40
  }
44
41
  }
45
42
  ```
@@ -144,7 +141,6 @@
144
141
  const p_values = p_sh.getRange(col_A + "1:" + p_sh.getLastRow()).getValues();
145
142
  // 'PASTE' 貼り付け日でフィルター
146
143
  const p_filtered = p_values.filter(function (element) {
147
- console.log(element[0].getTime())
148
144
  return typeof element[0] == 'object' && element[0].getTime() == today_GetTime;
149
145
  });
150
146
  // Col並び替え
@@ -165,7 +161,6 @@
165
161
  if (!found) {
166
162
  a_Values.push(p_MoveCol[p]);
167
163
  }
168
-
169
164
  }
170
165
  if (a_Values.length < 1) return;
171
166
  a_sh.getRange(col_C + "4:" + col_M + (a_Values.length + 4 - 1)).setValues(a_Values);

3

 

2022/04/19 13:47

投稿

退会済みユーザー
test CHANGED
@@ -155,8 +155,7 @@
155
155
  var found = false;
156
156
  for (var a = 0; a < a_Values.length; a++) { // 'ARR CHECK'
157
157
  if (p_MoveCol[p][3] === a_Values[a][3] && p_MoveCol[p][4] === a_Values[a][4]) {
158
- console.log(p_MoveCol[p])
159
- a_Values[a]=p_MoveCol[p];
158
+ a_Values[a] = p_MoveCol[p];
160
159
  found = true;
161
160
  break;
162
161
  }

2

 

2022/04/19 13:45

投稿

退会済みユーザー
test CHANGED
@@ -120,3 +120,55 @@
120
120
  a_sh.appendRow(['', '', ...p_MoveCol[p]]);
121
121
  ```
122
122
  というように先頭に2つダミーの値を入れて行追加してずれないようにしています。
123
+
124
+
125
+ ----
126
+
127
+ # 高速化
128
+ 下記のように、1行ずつsetValuesで書きこむのではなく、配列で加工してまとめて書き込むことで、高速化できます。
129
+ ```js
130
+ function copyPaste2() {
131
+ const col_A = "A";
132
+ const col_C = "C";
133
+ const col_M = "M";
134
+
135
+ const today = new Date(); today.setHours(0, 0, 0, 0);
136
+ const today_GetTime = today.getTime();
137
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
138
+ const p_sh = ss.getSheetByName('PASTE')
139
+ const a_sh = ss.getSheetByName('A CHECK')
140
+
141
+ // 'A CHECK'
142
+ const a_Values = a_sh.getRange(col_C + "4:" + col_M + a_sh.getLastRow()).getValues();
143
+ // 'PASTE'
144
+ const p_values = p_sh.getRange(col_A + "1:" + p_sh.getLastRow()).getValues();
145
+ // 'PASTE' 貼り付け日でフィルター
146
+ const p_filtered = p_values.filter(function (element) {
147
+ console.log(element[0].getTime())
148
+ return typeof element[0] == 'object' && element[0].getTime() == today_GetTime;
149
+ });
150
+ // Col並び替え
151
+ const p_MoveCol = p_filtered.map(elm => [elm[0], elm[7], elm[19], elm[3], elm[4], elm[29], elm[15], elm[17], elm[16], elm[26], elm[35]]);
152
+
153
+
154
+ for (var p = 0; p < p_MoveCol.length; p++) { // 'PASTE'
155
+ var found = false;
156
+ for (var a = 0; a < a_Values.length; a++) { // 'ARR CHECK'
157
+ if (p_MoveCol[p][3] === a_Values[a][3] && p_MoveCol[p][4] === a_Values[a][4]) {
158
+ console.log(p_MoveCol[p])
159
+ a_Values[a]=p_MoveCol[p];
160
+ found = true;
161
+ break;
162
+ }
163
+ }
164
+ // 行が見つからなかったら新しくデータを挿入
165
+ //sheet_CopyTo.appendRow([[p]]);
166
+ if (!found) {
167
+ a_Values.push(p_MoveCol[p]);
168
+ }
169
+
170
+ }
171
+ if (a_Values.length < 1) return;
172
+ a_sh.getRange(col_C + "4:" + col_M + (a_Values.length + 4 - 1)).setValues(a_Values);
173
+ }
174
+ ```

1

 

2022/04/19 13:26

投稿

退会済みユーザー
test CHANGED
@@ -107,7 +107,7 @@
107
107
   
108
108
  returnすると、その関数から抜けます。
109
109
   
110
- このため、1行追加しただけでスクリプトが終了してしまいます。
110
+ このため、①②を直して実行しても、重複がない行が見つかった段階で、1行追加されるだけでスクリプトが終了してしまいます。
111
111
   
112
112
  したがって、上記修正案では、
113
113
  ・重複する行が見つかった場合は上書きして次のループに行く