質問編集履歴
6
書き直しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
```このコードで動きません。
|
3
2
|
//他のスプレッドシートから特定の列のデータを条件にしたがい抽出
|
4
3
|
function getSelectedValues() {
|
5
4
|
//初期設定
|
@@ -67,29 +66,25 @@
|
|
67
66
|
sheet.getRange(SET_ROW, SET_COL, sheet.getLastRow(), items[0].length).clearContent();
|
68
67
|
}
|
69
68
|
sheet.getRange(SET_ROW, SET_COL, items.length, items[0].length).setValues(items);
|
70
|
-
}
|
71
69
|
}
|
72
|
-
|
73
|
-
|
70
|
+
}
|
71
|
+
newScript(sheet);
|
74
|
-
function
|
72
|
+
function replaceValues() {
|
75
|
-
var sheet = SpreadsheetApp.getActiveSheet();
|
73
|
+
var sheet = SpreadsheetApp.getActiveSheet();
|
76
|
-
var range = sheet.getDataRange();
|
74
|
+
var range = sheet.getDataRange();
|
77
|
-
var values = range.getValues();
|
75
|
+
var values = range.getValues();
|
78
|
-
|
76
|
+
|
79
|
-
for (var row = 0; row < values.length; row++) {
|
77
|
+
for (var row = 0; row < values.length; row++) {
|
80
|
-
if (values[row][
|
78
|
+
if (values[row][1] == "投手" && values[row][6] == "契約中") {
|
81
|
-
values[row][
|
79
|
+
values[row][1] = "ピッチャー";
|
82
|
-
values[row][
|
80
|
+
values[row][6] = "解雇";
|
83
|
-
} else if (values[row][
|
81
|
+
} else if (values[row][1] == "捕手" && values[row][6] == "契約中") {
|
84
|
-
values[row][
|
82
|
+
values[row][1] = "キャッチャー";
|
85
|
-
values[row][
|
83
|
+
values[row][6] = "解雇";
|
86
84
|
}
|
87
85
|
}
|
88
86
|
|
89
87
|
range.setValues(values);
|
90
88
|
}
|
91
89
|
|
92
|
-
①のスクリプトの後に②を追加したのですが、動きません。
|
93
|
-
どなたかわかる方いらっしゃらないでしょう。
|
94
|
-
|
90
|
+
```
|
95
|
-
|
5
書き直しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
スクリプトを
|
1
|
+
スクリプト(①②)を順に動かすにはどうしたら良いでしょうか。
|
test
CHANGED
@@ -1,25 +1,5 @@
|
|
1
|
-
②
|
2
|
-
function newScript(sheet) {
|
3
|
-
var sheet = SpreadsheetApp.getActiveSheet();
|
4
|
-
var range = sheet.getDataRange();
|
5
|
-
var values = range.getValues();
|
6
1
|
|
7
|
-
for (var row = 0; row < values.length; row++) {
|
8
|
-
if (values[row][2] == "投手" && values[row][12] == "契約中") {
|
9
|
-
values[row][2] = "ピッチャー";
|
10
|
-
values[row][12] = "解雇";
|
11
|
-
} else if (values[row][2] == "捕手" && values[row][12] == "契約中") {
|
12
|
-
values[row][2] = "キャッチャー";
|
13
|
-
values[row][12] = "解雇";
|
14
|
-
|
2
|
+
①
|
15
|
-
}
|
16
|
-
|
17
|
-
range.setValues(values);
|
18
|
-
}
|
19
|
-
|
20
|
-
②のスクリプトをすでに作成したスクリプト①の下につけて同時に動かしたいのですがどうすれば良いでしょうか。
|
21
|
-
|
22
|
-
|
23
3
|
//他のスプレッドシートから特定の列のデータを条件にしたがい抽出
|
24
4
|
function getSelectedValues() {
|
25
5
|
//初期設定
|
@@ -89,3 +69,27 @@
|
|
89
69
|
sheet.getRange(SET_ROW, SET_COL, items.length, items[0].length).setValues(items);
|
90
70
|
}
|
91
71
|
}
|
72
|
+
|
73
|
+
②
|
74
|
+
function newScript(sheet) {
|
75
|
+
var sheet = SpreadsheetApp.getActiveSheet();
|
76
|
+
var range = sheet.getDataRange();
|
77
|
+
var values = range.getValues();
|
78
|
+
|
79
|
+
for (var row = 0; row < values.length; row++) {
|
80
|
+
if (values[row][2] == "投手" && values[row][12] == "契約中") {
|
81
|
+
values[row][2] = "ピッチャー";
|
82
|
+
values[row][12] = "解雇";
|
83
|
+
} else if (values[row][2] == "捕手" && values[row][12] == "契約中") {
|
84
|
+
values[row][2] = "キャッチャー";
|
85
|
+
values[row][12] = "解雇";
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
range.setValues(values);
|
90
|
+
}
|
91
|
+
|
92
|
+
①のスクリプトの後に②を追加したのですが、動きません。
|
93
|
+
どなたかわかる方いらっしゃらないでしょう。
|
94
|
+
よろしくお願いいたします。
|
95
|
+
|
4
書き直しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,91 @@
|
|
1
|
-
|
1
|
+
②
|
2
|
+
function newScript(sheet) {
|
3
|
+
var sheet = SpreadsheetApp.getActiveSheet();
|
4
|
+
var range = sheet.getDataRange();
|
5
|
+
var values = range.getValues();
|
2
6
|
|
3
|
-
|
7
|
+
for (var row = 0; row < values.length; row++) {
|
8
|
+
if (values[row][2] == "投手" && values[row][12] == "契約中") {
|
9
|
+
values[row][2] = "ピッチャー";
|
10
|
+
values[row][12] = "解雇";
|
11
|
+
} else if (values[row][2] == "捕手" && values[row][12] == "契約中") {
|
12
|
+
values[row][2] = "キャッチャー";
|
13
|
+
values[row][12] = "解雇";
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
range.setValues(values);
|
18
|
+
}
|
4
19
|
|
5
|
-
|
6
|
-
|
20
|
+
②のスクリプトをすでに作成したスクリプト①の下につけて同時に動かしたいのですがどうすれば良いでしょうか。
|
21
|
+
|
22
|
+
|
23
|
+
//他のスプレッドシートから特定の列のデータを条件にしたがい抽出
|
24
|
+
function getSelectedValues() {
|
25
|
+
//初期設定
|
26
|
+
const SS_ID = '1ZCs6OPN0TFjb9fJ4qYCCqsef1PsRDIAgawBdaUYxbxA';//他のスプレッドシートのID
|
27
|
+
const SHEET_NAME = 'シート1';//他のスプレッドシートの抽出対象シート名
|
28
|
+
const GET_COLS = [2, 3, 6, 7, 9, 12, 13];//抽出対象列(BCFGLIM列)
|
29
|
+
const KEY_PATTERNS = [ //抽出条件のパターン: 最初の要素は列番号、次からキーワード
|
30
|
+
[ //パターン1
|
31
|
+
[3, '投手'], //条件1(キーワード1つ)
|
32
|
+
[9, 'A型', 'B型', 'O型', '不明'], //条件2( 〃 4つ)
|
33
|
+
[13, '契約中'] //条件3( 〃 1つ)
|
34
|
+
],
|
35
|
+
[ //パターン2
|
36
|
+
[3, '捕手'],
|
37
|
+
[9, 'AB型', 'O型']
|
38
|
+
//全て一致の列は条件を削除
|
39
|
+
]
|
40
|
+
]; //要素を追加、削除したときのカンマに注意(最後の要素の後のカンマ1つだけは無視される)
|
41
|
+
const SET_ROW = 2;//データの挿入開始行
|
42
|
+
const SET_COL = 1;//データの挿入開始列
|
43
|
+
//初期設定はここまで
|
44
|
+
//他のシートからデータを抽出
|
45
|
+
const otherSheet = SpreadsheetApp.openById(SS_ID).getSheetByName(SHEET_NAME);
|
46
|
+
const values = otherSheet.getDataRange().getValues();
|
47
|
+
const items = [];//抽出データ格納用
|
48
|
+
//検索パターンごとに繰り返す
|
49
|
+
for (const pattern of KEY_PATTERNS) {
|
50
|
+
//検索列と検索条件をそれぞれの配列に分ける
|
51
|
+
const colKeys = [];
|
52
|
+
const keys = [];
|
53
|
+
for (const key of pattern) {
|
54
|
+
colKeys.push(key[0]);
|
55
|
+
keys.push(key.slice(1));
|
56
|
+
}
|
57
|
+
//条件にマッチする行を探索し指定列のデータを抽出
|
58
|
+
for (const row of values) {
|
59
|
+
let matchCount = 0;//条件にマッチした列の数
|
60
|
+
//条件の数だけ繰り返す
|
61
|
+
for (const i in colKeys) {
|
62
|
+
let isMatch = false;//条件中のキーワードにマッチしたか
|
63
|
+
//キーワードの数だけ繰り返す
|
64
|
+
for (const word of keys[i]) {
|
65
|
+
if (word == row[colKeys[i] - 1]) {
|
66
|
+
isMatch = true;
|
67
|
+
break;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
if (isMatch) {
|
71
|
+
matchCount++;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
if (matchCount == colKeys.length) {
|
75
|
+
const item = [];
|
76
|
+
for (const col of GET_COLS) {
|
77
|
+
item.push(row[col - 1]);
|
78
|
+
}
|
79
|
+
items.push(item);
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
//抽出データをシートに挿入
|
84
|
+
const sheet = SpreadsheetApp.getActiveSheet();
|
85
|
+
if (items.length > 0) {
|
86
|
+
if (sheet.getLastRow() > 0) {
|
87
|
+
sheet.getRange(SET_ROW, SET_COL, sheet.getLastRow(), items[0].length).clearContent();
|
88
|
+
}
|
89
|
+
sheet.getRange(SET_ROW, SET_COL, items.length, items[0].length).setValues(items);
|
90
|
+
}
|
91
|
+
}
|
3
書き直しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
スクリプトを2つ同時に動かすにはどうしたら良いでしょうか。
|
test
CHANGED
@@ -1,21 +1,6 @@
|
|
1
|
-
|
1
|
+
function newScript(sheet) { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getDataRange(); var values = range.getValues(); for (var row = 0; row < values.length; row++) { if (values[row][2] == "投手" && values[row][12] == "契約中") { values[row][2] = "ピッチャー"; values[row][12] = "解雇"; } else if (values[row][2] == "捕手" && values[row][12] == "契約中") { values[row][2] = "キャッチャー"; values[row][12] = "解雇"; } } range.setValues(values); }
|
2
2
|
|
3
|
-
|
3
|
+
これをすでに作成したスクリプトの下につけて同時に動かしたいのですがどうすれば良いでしょうか。
|
4
4
|
|
5
|
-
|
6
|
-
C列の
|
7
|
-
文字列を「ピッチャー」、「解雇」に置換
|
8
|
-
|
9
|
-
|
10
|
-
パターン②
|
11
|
-
C列の文字列が「捕手」でM列の文字列が「契約中」の場合
|
12
|
-
文字列を「キャッチャー」、「解雇」に置換
|
13
|
-
|
14
|
-
上記のようなサンプルコードをご教示いただけないでしょうか。
|
15
|
-
|
16
|
-
よろしくお願いいたします。
|
17
|
-
|
18
|
-

|
19
|
-
上記のようなサンプルコードをご教示いただけないでしょうか。
|
20
|
-
|
21
|
-
よろしくお願いいいたします。
|
5
|
+
抽出スクリプト
|
6
|
+
//他のスプレッドシートから特定の列のデータを条件にしたがい抽出 function getSelectedValues() { //初期設定 const SS_ID = '1ZCs6OPN0TFjb9fJ4qYCCqsef1PsRDIAgawBdaUYxbxA';//他のスプレッドシートのID const SHEET_NAME = 'シート1';//他のスプレッドシートの抽出対象シート名 const GET_COLS = [2, 3, 6, 7, 9, 12, 13];//抽出対象列(BCFGLIM列) const KEY_PATTERNS = [ //抽出条件のパターン: 最初の要素は列番号、次からキーワード [ //パターン1 [3, '投手'], //条件1(キーワード1つ) [9, 'A型', 'B型', 'O型', '不明'], //条件2( 〃 4つ) [13, '契約中'] //条件3( 〃 1つ) ], [ //パターン2 [3, '捕手'], [9, 'AB型', 'O型'] //全て一致の列は条件を削除 ] ]; //要素を追加、削除したときのカンマに注意(最後の要素の後のカンマ1つだけは無視される) const SET_ROW = 2;//データの挿入開始行 const SET_COL = 1;//データの挿入開始列 //初期設定はここまで //他のシートからデータを抽出 const otherSheet = SpreadsheetApp.openById(SS_ID).getSheetByName(SHEET_NAME); const values = otherSheet.getDataRange().getValues(); const items = [];//抽出データ格納用 //検索パターンごとに繰り返す for (const pattern of KEY_PATTERNS) { //検索列と検索条件をそれぞれの配列に分ける const colKeys = []; const keys = []; for (const key of pattern) { colKeys.push(key[0]); keys.push(key.slice(1)); } //条件にマッチする行を探索し指定列のデータを抽出 for (const row of values) { let matchCount = 0;//条件にマッチした列の数 //条件の数だけ繰り返す for (const i in colKeys) { let isMatch = false;//条件中のキーワードにマッチしたか //キーワードの数だけ繰り返す for (const word of keys[i]) { if (word == row[colKeys[i] - 1]) { isMatch = true; break; } } if (isMatch) { matchCount++; } } if (matchCount == colKeys.length) { const item = []; for (const col of GET_COLS) { item.push(row[col - 1]); } items.push(item); } } } //抽出データをシートに挿入 const sheet = SpreadsheetApp.getActiveSheet(); if (items.length > 0) { if (sheet.getLastRow() > 0) { sheet.getRange(SET_ROW, SET_COL, sheet.getLastRow(), items[0].length).clearContent(); } sheet.getRange(SET_ROW, SET_COL, items.length, items[0].length).setValues(items); }
|
2
文言変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
### 実現したいこと
|
2
2
|
|
3
|
+
ASについて詳しい方、お願いします。
|
4
|
+
|
5
|
+
パターン①
|
3
|
-
C列の文字列が「
|
6
|
+
C列の文字列が「投手」でM列の文字列が「契約中」の場合
|
4
|
-
文字列を「
|
7
|
+
文字列を「ピッチャー」、「解雇」に置換
|
8
|
+
|
9
|
+
|
5
10
|
パターン②
|
6
|
-
|
11
|
+
C列の文字列が「捕手」でM列の文字列が「契約中」の場合
|
7
|
-
文字列を「
|
12
|
+
文字列を「キャッチャー」、「解雇」に置換
|
8
|
-
|
13
|
+
|
9
14
|
上記のようなサンプルコードをご教示いただけないでしょうか。
|
10
15
|
|
11
16
|
よろしくお願いいたします。
|
17
|
+
|
18
|
+

|
19
|
+
上記のようなサンプルコードをご教示いただけないでしょうか。
|
20
|
+
|
21
|
+
よろしくお願いいいたします。
|
1
画像ついかしました
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
### 実現したいこと
|
2
|
-
|
3
|
-
抽出先に抽出する際に
|
4
2
|
|
5
3
|
C列の文字列が「○○」でM列の文字列が「○○」の場合
|
6
4
|
文字列を「○○」→▲▲、「○○」→「▲▲」に置換
|
7
5
|
パターン②
|
8
6
|
C列の文字列が「◉◉」でM列の文字列が「◎◎」の場合
|
9
7
|
文字列を「◉◉」→「△△」、「◎◎」→「△△」に置換
|
10
|
-
|
8
|
+

|
11
9
|
上記のようなサンプルコードをご教示いただけないでしょうか。
|
12
10
|
|
13
11
|
よろしくお願いいたします。
|