質問編集履歴

6

書き直しました。

2023/02/24 08:41

投稿

nocci
nocci

スコア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 newScript(sheet) {
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][2] == "投手" && values[row][12] == "契約中") {
78
+ if (values[row][1] == "投手" && values[row][6] == "契約中") {
81
- values[row][2] = "ピッチャー";
79
+ values[row][1] = "ピッチャー";
82
- values[row][12] = "解雇";
80
+ values[row][6] = "解雇";
83
- } else if (values[row][2] == "捕手" && values[row][12] == "契約中") {
81
+ } else if (values[row][1] == "捕手" && values[row][6] == "契約中") {
84
- values[row][2] = "キャッチャー";
82
+ values[row][1] = "キャッチャー";
85
- values[row][12] = "解雇";
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

書き直しました。

2023/02/24 06:42

投稿

nocci
nocci

スコア6

test CHANGED
@@ -1 +1 @@
1
- スクリプトを2つ同時に動かすにはどうしたら良いでしょうか。
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

書き直しました

2023/02/24 06:15

投稿

nocci
nocci

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,91 @@
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); }
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
- //他のスプレッドシートから特定の列のデータを条件にしたがい抽出 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); }
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

書き直しました。

2023/02/24 05:52

投稿

nocci
nocci

スコア6

test CHANGED
@@ -1 +1 @@
1
- GASついて詳しい方お願います
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
- ASにつしい方、お願いします
3
+ これをすで作成したスクリプトの下に同時に動かのですがどうすれば良ょうか
4
4
 
5
- パターン①
6
- C列の文字が「投手でM列の文字が「契約場合
7
- 文字列を「ピッチャー」、「解雇」に置換
8
-
9
-
10
- パターン②
11
- C列の文字列が「捕手」でM列の文字列が「契約中」の場合
12
- 文字列を「キャッチャー」、「解雇」に置換
13
-
14
- 上記のようなサンプルコードをご教示いただけないでしょうか。
15
-
16
- よろしくお願いいたします。
17
-
18
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-23/2e962c4c-67af-4584-9626-6bbbe372dec1.jpeg)
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

文言変更

2023/02/23 14:58

投稿

nocci
nocci

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,11 +1,21 @@
1
1
  ### 実現したいこと
2
2
 
3
+ ASについて詳しい方、お願いします。
4
+
5
+ パターン①
3
- C列の文字列が「○○」でM列の文字列が「○○」の場合
6
+ C列の文字列が「投手」でM列の文字列が「契約中」の場合
4
- 文字列を「○○→▲▲、「○○→「▲▲」に置換
7
+ 文字列を「ピッチャー」、「解雇」に置換
8
+
9
+
5
10
  パターン②
6
- C列の文字列が「◉◉」でM列の文字列が「◎◎」の場合
11
+ C列の文字列が「捕手」でM列の文字列が「契約中」の場合
7
- 文字列を「◉◉→「△△」、「◎◎→「△△」に置換
12
+ 文字列を「キャッチャー」、「解雇」に置換
8
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-23/e016664e-92cf-4a1b-b81d-35bdf189df67.png)
13
+
9
14
  上記のようなサンプルコードをご教示いただけないでしょうか。
10
15
 
11
16
  よろしくお願いいたします。
17
+
18
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-23/2e962c4c-67af-4584-9626-6bbbe372dec1.jpeg)
19
+ 上記のようなサンプルコードをご教示いただけないでしょうか。
20
+
21
+ よろしくお願いいいたします。

1

画像ついかしました

2023/02/23 14:39

投稿

nocci
nocci

スコア6

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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-23/e016664e-92cf-4a1b-b81d-35bdf189df67.png)
11
9
  上記のようなサンプルコードをご教示いただけないでしょうか。
12
10
 
13
11
  よろしくお願いいたします。