回答編集履歴
4
不要なログ表示を削除
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
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
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
test
CHANGED
@@ -107,7 +107,7 @@
|
|
107
107
|
|
108
108
|
returnすると、その関数から抜けます。
|
109
109
|
|
110
|
-
このため、1行追加
|
110
|
+
このため、①②を直して実行しても、重複がない行が見つかった段階で、1行追加されるだけでスクリプトが終了してしまいます。
|
111
111
|
|
112
112
|
したがって、上記修正案では、
|
113
113
|
・重複する行が見つかった場合は上書きして次のループに行く
|