回答編集履歴
7
コメントを再修正
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
colBegin: 2, //開始列:B列
|
11
11
|
colEnd: 13, //最終列:M列(この列以降は不要:N列~)
|
12
12
|
colStatus: 5, //ステータスの列:E列
|
13
|
-
colNumber: 7, //番号の列:
|
13
|
+
colNumber: 7, //番号の列:G列
|
14
14
|
colFillerBegin: 10, //不要な列の開始列:J列
|
15
15
|
colFillerEnd: 12, //不要な列の終了列:L列
|
16
16
|
};
|
6
コメントを再修正
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
const fr = { //転記元データ
|
9
9
|
rowBegin: 5, //開始行:5行目
|
10
10
|
colBegin: 2, //開始列:B列
|
11
|
-
colEnd: 13, //最終列:
|
11
|
+
colEnd: 13, //最終列:M列(この列以降は不要:N列~)
|
12
12
|
colStatus: 5, //ステータスの列:E列
|
13
13
|
colNumber: 7, //番号の列:M列
|
14
14
|
colFillerBegin: 10, //不要な列の開始列:J列
|
5
コメントを再修正
test
CHANGED
@@ -8,9 +8,9 @@
|
|
8
8
|
const fr = { //転記元データ
|
9
9
|
rowBegin: 5, //開始行:5行目
|
10
10
|
colBegin: 2, //開始列:B列
|
11
|
-
colEnd: 13, //最終列:この列以降は不要:N列
|
11
|
+
colEnd: 13, //最終列:G列(この列以降は不要:N列~)
|
12
12
|
colStatus: 5, //ステータスの列:E列
|
13
|
-
colNumber: 7, //番号の列:
|
13
|
+
colNumber: 7, //番号の列:M列
|
14
14
|
colFillerBegin: 10, //不要な列の開始列:J列
|
15
15
|
colFillerEnd: 12, //不要な列の終了列:L列
|
16
16
|
};
|
4
コメントを追記、修正
test
CHANGED
@@ -20,8 +20,8 @@
|
|
20
20
|
colNumber: 6, //番号の列:F列
|
21
21
|
};
|
22
22
|
const ss = SpreadsheetApp.getActiveSpreadsheet();
|
23
|
-
fr.sheet = ss.getSheetByName(FROM_NAME);
|
23
|
+
fr.sheet = ss.getSheetByName(FROM_NAME);//← FROM_NAMEを実際の 'シート名' で書換
|
24
|
-
to.sheet = ss.getSheetByName(TO_NAME);
|
24
|
+
to.sheet = ss.getSheetByName(TO_NAME);//同上
|
25
25
|
//転記元データを二次元配列として取得
|
26
26
|
let fromValues = fr.sheet.getRange(fr.rowBegin, fr.colBegin, fr.sheet.getLastRow() - fr.rowBegin + 1, fr.colEnd - fr.colBegin + 1).getValues();
|
27
27
|
//確定となっている要素を抽出
|
@@ -35,7 +35,7 @@
|
|
35
35
|
if (fromValues.length > 0) {
|
36
36
|
//不要な列の要素を除く
|
37
37
|
fromValues.forEach(f => f.splice(fr.colFillerBegin - fr.colBegin, fr.colFillerEnd - fr.colFillerBegin + 1));
|
38
|
-
//転記先シートの最終行に記
|
38
|
+
//転記先シートの最終行の後に追記
|
39
39
|
to.sheet.getRange(to.sheet.getLastRow() + 1, 1, fromValues.length, fromValues[0].length).setValues(fromValues);
|
40
40
|
}
|
41
41
|
}
|
@@ -60,7 +60,7 @@
|
|
60
60
|
if (vFrom.length > 0) {
|
61
61
|
//不要な列の要素を除く
|
62
62
|
vFrom.forEach(f => f.splice(8, 3));
|
63
|
-
//転記先シートの最終行に記
|
63
|
+
//転記先シートの最終行の後に追記
|
64
64
|
shTo.getRange(shTo.getLastRow() + 1, 1, vFrom.length, vFrom[0].length).setValues(vFrom);
|
65
65
|
}
|
66
66
|
}
|
3
変数の宣言を修正してみました。番号の列のインデクスの指定を本来の指定にしました。
test
CHANGED
@@ -1,38 +1,42 @@
|
|
1
|
-
例えば次のようなスクリプトでしょうか。(修正案をアップしました。)
|
1
|
+
例えば次のようなスクリプトでしょうか。(修正案の再修正をアップしました。)
|
2
2
|
当初の例で画像シートの行、列、配列のインデックスを数値のまま(いわゆるマジックナンバーのまま)使っていました。
|
3
3
|
また、転記する列がM列以降となっていたので、N列以降は転記しないように改めました。
|
4
|
-
行、列を指定する変数名が多くなりました。
|
4
|
+
行、列を指定する変数名が多くなりました。(→変数の扱いを再修正しました。)
|
5
|
-
変数の名前は、右クリックの「シンボル名変更 F2」で適当に修正してみてください。
|
6
5
|
|
7
6
|
```JavaScript
|
8
7
|
function myFunction() {
|
9
|
-
const rowFromBegin = 5;//転記元データの開始行:5行目
|
10
|
-
const columnFromBegin = 2;//転記元データの開始列:B列
|
11
|
-
const columnFromEnd = 13;//転記元データ最終列この列以降は不要:M列
|
12
|
-
const r
|
8
|
+
const fr = { //転記元データ
|
9
|
+
rowBegin: 5, //開始行:5行目
|
10
|
+
colBegin: 2, //開始列:B列
|
11
|
+
colEnd: 13, //最終列:この列以降は不要:N列
|
13
|
-
|
12
|
+
colStatus: 5, //ステータスの列:E列
|
14
|
-
const columnFromStatus = 5;//転記元データのステータスの列:E列
|
15
|
-
|
13
|
+
colNumber: 7, //番号の列:G列
|
16
|
-
|
14
|
+
colFillerBegin: 10, //不要な列の開始列:J列
|
17
|
-
|
15
|
+
colFillerEnd: 12, //不要な列の終了列:L列
|
16
|
+
};
|
17
|
+
const to = { //転記先データ
|
18
|
+
rowBegin: 4, //開始列:4行目
|
19
|
+
colBegin: 1, //開始列:A列
|
20
|
+
colNumber: 6, //番号の列:F列
|
21
|
+
};
|
18
22
|
const ss = SpreadsheetApp.getActiveSpreadsheet();
|
19
|
-
|
23
|
+
fr.sheet = ss.getSheetByName(FROM_NAME);
|
20
|
-
|
24
|
+
to.sheet = ss.getSheetByName(TO_NAME);
|
21
25
|
//転記元データを二次元配列として取得
|
22
|
-
let
|
26
|
+
let fromValues = fr.sheet.getRange(fr.rowBegin, fr.colBegin, fr.sheet.getLastRow() - fr.rowBegin + 1, fr.colEnd - fr.colBegin + 1).getValues();
|
23
27
|
//確定となっている要素を抽出
|
24
|
-
fromValues = fromValues.filter(v => v[col
|
28
|
+
fromValues = fromValues.filter(v => v[fr.colStatus - fr.colBegin] == '確定');
|
25
29
|
//転記先の番号の列を一元配列として取得
|
26
|
-
const toValues = sheet
|
30
|
+
const toValues = to.sheet.getRange(to.rowBegin, to.colNumber, to.sheet.getLastRow() - to.rowBegin + 1, 1).getValues().flat();
|
27
31
|
//番号が一致している要素を除く
|
28
32
|
if (fromValues.length > 0) {
|
29
|
-
fromValues = fromValues.filter(f => toValues.every(t => t != f[col
|
33
|
+
fromValues = fromValues.filter(f => toValues.every(t => t != f[fr.colNumber - fr.colBegin]));
|
30
34
|
}
|
31
35
|
if (fromValues.length > 0) {
|
32
36
|
//不要な列の要素を除く
|
33
|
-
fromValues.forEach(f => f.splice(col
|
37
|
+
fromValues.forEach(f => f.splice(fr.colFillerBegin - fr.colBegin, fr.colFillerEnd - fr.colFillerBegin + 1));
|
34
38
|
//転記先シートの最終行に記入
|
35
|
-
sheet
|
39
|
+
to.sheet.getRange(to.sheet.getLastRow() + 1, 1, fromValues.length, fromValues[0].length).setValues(fromValues);
|
36
40
|
}
|
37
41
|
}
|
38
42
|
```
|
2
誤記訂正
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
}
|
31
31
|
if (fromValues.length > 0) {
|
32
32
|
//不要な列の要素を除く
|
33
|
-
fromValues.forEach(f => f.splice(col
|
33
|
+
fromValues.forEach(f => f.splice(columnFromFillerBegin - columnFromBegin, columnFromFillerEnd - columnFromFillerBegin + 1));
|
34
34
|
//転記先シートの最終行に記入
|
35
35
|
sheetTo.getRange(sheetTo.getLastRow() + 1, 1, fromValues.length, fromValues[0].length).setValues(fromValues);
|
36
36
|
}
|
1
マジックナンバーの解消等の修正をしました。
test
CHANGED
@@ -1,7 +1,43 @@
|
|
1
|
-
例えば次のようなスクリプトでしょうか。
|
1
|
+
例えば次のようなスクリプトでしょうか。(修正案をアップしました。)
|
2
|
-
取り急ぎ作成したので、
|
3
|
-
画像シートの行、列、配列のインデックスを数値のまま(いわゆるマジックナンバーのまま)使っていま
|
2
|
+
当初の例で画像シートの行、列、配列のインデックスを数値のまま(いわゆるマジックナンバーのまま)使っていました。
|
3
|
+
また、転記する列がM列以降となっていたので、N列以降は転記しないように改めました。
|
4
|
+
行、列を指定する変数名が多くなりました。
|
5
|
+
変数の名前は、右クリックの「シンボル名変更 F2」で適当に修正してみてください。
|
4
6
|
|
7
|
+
```JavaScript
|
8
|
+
function myFunction() {
|
9
|
+
const rowFromBegin = 5;//転記元データの開始行:5行目
|
10
|
+
const columnFromBegin = 2;//転記元データの開始列:B列
|
11
|
+
const columnFromEnd = 13;//転記元データ最終列この列以降は不要:M列
|
12
|
+
const rowToBegin = 4;//転記先データの開始列:4行目
|
13
|
+
const columnToBegin = 1;//転記先データの開始列:A列
|
14
|
+
const columnFromStatus = 5;//転記元データのステータスの列:E列
|
15
|
+
const columnToNumber = 6;//転記先データの番号の列:F列
|
16
|
+
const columnFromFillerBegin = 10;//転記元データの不要な列の開始列:J列
|
17
|
+
const columnFromFillerEnd =12;//転記元データの不要な列の終了列:L列
|
18
|
+
const ss = SpreadsheetApp.getActiveSpreadsheet();
|
19
|
+
const sheetfrom = ss.getSheetByName(FROM_NAME);
|
20
|
+
const sheetTo = ss.getSheetByName(TO_NAME);
|
21
|
+
//転記元データを二次元配列として取得
|
22
|
+
let fromValues = sheetfrom.getRange(rowFromBegin, columnFromBegin, sheetfrom.getLastRow() - rowFromBegin + 1, columnFromEnd - columnFromBegin + 1).getValues();
|
23
|
+
//確定となっている要素を抽出
|
24
|
+
fromValues = fromValues.filter(v => v[columnFromStatus - columnFromBegin] == '確定');
|
25
|
+
//転記先の番号の列を一元配列として取得
|
26
|
+
const toValues = sheetTo.getRange(rowToBegin, columnToNumber, sheetTo.getLastRow() - rowToBegin + 1, 1).getValues().flat();
|
27
|
+
//番号が一致している要素を除く
|
28
|
+
if (fromValues.length > 0) {
|
29
|
+
fromValues = fromValues.filter(f => toValues.every(t => t != f[columnToNumber - columnToBegin]));
|
30
|
+
}
|
31
|
+
if (fromValues.length > 0) {
|
32
|
+
//不要な列の要素を除く
|
33
|
+
fromValues.forEach(f => f.splice(col).splice(columnFromFillerBegin - columnFromBegin, columnFromFillerEnd - columnFromFillerBegin + 1));
|
34
|
+
//転記先シートの最終行に記入
|
35
|
+
sheetTo.getRange(sheetTo.getLastRow() + 1, 1, fromValues.length, fromValues[0].length).setValues(fromValues);
|
36
|
+
}
|
37
|
+
}
|
38
|
+
```
|
39
|
+
|
40
|
+
(当初の提案:N列以降も転記される)
|
5
41
|
```JavaScript
|
6
42
|
function myFunction() {
|
7
43
|
const ss = SpreadsheetApp.getActiveSpreadsheet();
|