質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

1回答

756閲覧

スクリプト(①②)を順に動かすにはどうしたら良いでしょうか。

nocci

総合スコア8

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2023/02/23 14:06

編集2023/02/24 08:41
//他のスプレッドシートから特定の列のデータを条件にしたがい抽出 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); } } newScript(sheet); function replaceValues() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getDataRange(); var values = range.getValues(); for (var row = 0; row < values.length; row++) { if (values[row][1] == "投手" && values[row][6] == "契約中") { values[row][1] = "ピッチャー"; values[row][6] = "解雇"; } else if (values[row][1] == "捕手" && values[row][6] == "契約中") { values[row][1] = "キャッチャー"; values[row][6] = "解雇"; } } range.setValues(values); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2023/02/23 14:32

他人に伝わるよう質問しましょう。
nocci

2023/02/23 14:40

画像を追加しました。 これでどうでしょうか。。
Zuishin

2023/02/23 14:42

さっぱりです。
nocci

2023/02/23 14:47

この表にある、 C列「投手」→ピッチャーに 文字列を変えたいってことなんですが、、、
Zuishin

2023/02/23 14:52 編集

GAS ではなくシートを開いてメニューから置換機能を使えばいいのでは?
nocci

2023/02/23 14:59

もともとこのデータも違うスプシからデータを抽出したもので、合わせて文字置換できないかなと...
Zuishin

2023/02/23 15:04

質問の表現を見る限り、投手をピッチャーに、保守をキャッチャーに、契約中を解雇にそれぞれ置換すれば済む話に見えます。 その三回の置換を自動的に行いたいということですか?
nocci

2023/02/23 15:11

はい、自動的に行いたいです!
m.ts10806

2023/02/24 00:20

タイトルには要件を記載してください。 現在のタイトルは質問タグのみで表現できる内容です。
nocci

2023/02/24 05:46

一応、できたのですが、 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); } これをすでに作成したスクリプトの下につけて同時に動かしたいのですがどうすれば良いでしょうか。 抽出スクリプト //他のスプレッドシートから特定の列のデータを条件にしたがい抽出 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); }
m.ts10806

2023/02/24 05:47

質問は編集できますので、制限字数(確か1万字)を超えない範囲なのであれば、本分に追記してください。 コメント欄ではマークダウン機能が使えないですし、他の人の目につきにくいです。 (ついでにタイトルも修正いただけたらと)
nocci

2023/02/24 05:53

ご指摘ありがとうございます、 書き直しました。
Zuishin

2023/02/24 06:31

「同時に」だと曖昧な表現で誤解を与えかねません。 片方の処理中にもう片方を行わなければならないのであれば並行処理、そうでないなら「順に」と書くほうが正確に伝わると思います。 おそらく「順に」の意味で書かれたと思うのですが、片方の終了後の部分にもう片方を挿入すれば良いのではないでしょうか。 それができないのであれば、できない理由を説明すると的確な回答が得られるのではないかと思います。
nocci

2023/02/24 06:43

ありがとうございます。 書き直しました。
m.ts10806

2023/02/24 06:50

```言語名 コード ````
Zuishin

2023/02/24 08:18

マークダウンが正しく使われていないためにコードが見づらいのでちゃんと読んでいませんが、どちらも正常に動いているのであれば、①の終わりに②を追加し、さらにその後に newScript(sheet) で動きそうな気もします。 ②は引数の sheet を使わず破棄していますが、そこはそのまま使うのが良いと思います。
nocci

2023/02/24 08:52

newScript(sheet) 、入れたのですが、 ダメでした。。 ②は引数の sheet を使わず破棄していますが、そこはそのまま使うのが良い →こちらはどういうことなのでしょうか。
Zuishin

2023/02/24 09:18

では新たにもう一つスクリプトを作り、その中から①と②を呼び出してみましょう。 呼び出しに成功したかどうかはログを見て確かめてください。
guest

回答1

0

残念ながら、ここではコードの作成依頼は受け付けていません

まずはあなたなりにコードを書いてみましょう。その上でわからないことを聞いていただければお答えできるかと思います。

投稿2023/02/23 14:45

y_waiwai

総合スコア87802

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2023/02/23 14:55

> お答えできるかと思います。 嘘をつかないでください。
m.ts10806

2023/02/24 00:20

コメントに指摘として書く内容では。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問