回答編集履歴
3
コード修正
answer
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
// カラム名で配列アクセスするためのインデックスを作成する
|
43
43
|
// ※前提条件:1行目は見出しであること
|
44
44
|
// ※列1~列15はサンプルのカラム名です。実際のカラム名に修正してください。
|
45
|
-
const header =
|
45
|
+
const header = master.shift(), cIndex = {};
|
46
46
|
for (var i = 0; i < header.length; i++) cIndex[header[i]] = i;
|
47
47
|
|
48
48
|
const inventory = master
|
2
コード修正
answer
CHANGED
@@ -42,8 +42,8 @@
|
|
42
42
|
// カラム名で配列アクセスするためのインデックスを作成する
|
43
43
|
// ※前提条件:1行目は見出しであること
|
44
44
|
// ※列1~列15はサンプルのカラム名です。実際のカラム名に修正してください。
|
45
|
-
const
|
45
|
+
const header = masterA.shift(), cIndex = {};
|
46
|
-
for (var i = 0; i <
|
46
|
+
for (var i = 0; i < header.length; i++) cIndex[header[i]] = i;
|
47
47
|
|
48
48
|
const inventory = master
|
49
49
|
.filter(function(e){return e[cIndex['列14']] === '未'})
|
1
追記
answer
CHANGED
@@ -3,4 +3,67 @@
|
|
3
3
|
0. マスタシートの全行を二次元配列に格納する。[getValues()](https://developers.google.com/apps-script/reference/spreadsheet/range#getValues())
|
4
4
|
0. 14列目が”未”の行のみ抽出する。[filter()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
|
5
5
|
0. 棚卸シートに必要な列のみ抽出する。[map()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
|
6
|
-
0. 棚卸シートの最終行に追加する。[setValues()](https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object))
|
6
|
+
0. 棚卸シートの最終行に追加する。[setValues()](https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object))
|
7
|
+
|
8
|
+
### 追記
|
9
|
+
これはサンプルです。
|
10
|
+
```GAS
|
11
|
+
function syoukyaku_before(){
|
12
|
+
var sheet = SpreadsheetApp.getActiveSpreadsheet();
|
13
|
+
var tana = sheet.getSheetByName("setsubi_tana");
|
14
|
+
var a_mst = sheet.getSheetByName("setsubi_a_masta")
|
15
|
+
|
16
|
+
const inventory = a_mst.getDataRange().getValues()
|
17
|
+
.filter(function(e){return e[13] === '未'})
|
18
|
+
.map(function(e){
|
19
|
+
const columns = [0,1,3,4,5,6,12,14], row = [];
|
20
|
+
for (var i = 0; i < columns.length; i++) row.push(e[columns[i]]);
|
21
|
+
return row;
|
22
|
+
});
|
23
|
+
|
24
|
+
if (inventory.length) {
|
25
|
+
tana.getRange(tana.getLastRow()+1, 1, inventory.length, inventory[0].length).setValues(inventory);
|
26
|
+
}
|
27
|
+
}
|
28
|
+
```
|
29
|
+
|
30
|
+
このサンプルだと、配列アクセスに`e[13]`とか`e[0]`とかで分かりづらいですね。
|
31
|
+
せめてカラム名でアクセスできるようにしてみます。
|
32
|
+
これでコードの可読性が向上し、後々発生するであろう変更(カラム追加等)にも比較的容易に対応することができます。
|
33
|
+
|
34
|
+
```GAS
|
35
|
+
function syoukyaku_before(){
|
36
|
+
var sheet = SpreadsheetApp.getActiveSpreadsheet();
|
37
|
+
var tana = sheet.getSheetByName("setsubi_tana");
|
38
|
+
var a_mst = sheet.getSheetByName("setsubi_a_masta")
|
39
|
+
|
40
|
+
const master = a_mst.getDataRange().getValues();
|
41
|
+
|
42
|
+
// カラム名で配列アクセスするためのインデックスを作成する
|
43
|
+
// ※前提条件:1行目は見出しであること
|
44
|
+
// ※列1~列15はサンプルのカラム名です。実際のカラム名に修正してください。
|
45
|
+
const heading = master.shift(), cIndex = {};
|
46
|
+
for (var i = 0; i < heading.length; i++) cIndex[heading[i]] = i;
|
47
|
+
|
48
|
+
const inventory = master
|
49
|
+
.filter(function(e){return e[cIndex['列14']] === '未'})
|
50
|
+
.map(function(e){
|
51
|
+
const columns = [
|
52
|
+
cIndex['列1'],
|
53
|
+
cIndex['列2'],
|
54
|
+
cIndex['列4'],
|
55
|
+
cIndex['列5'],
|
56
|
+
cIndex['列6'],
|
57
|
+
cIndex['列7'],
|
58
|
+
cIndex['列13'],
|
59
|
+
cIndex['列15'],
|
60
|
+
], row = [];
|
61
|
+
for (var i = 0; i < columns.length; i++) row.push(e[columns[i]]);
|
62
|
+
return row;
|
63
|
+
});
|
64
|
+
|
65
|
+
if (inventory.length) {
|
66
|
+
tana.getRange(tana.getLastRow()+1, 1, inventory.length, inventory[0].length).setValues(inventory);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
```
|