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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

4996閲覧

[GAS] 条件に合う複数行を選択し配列に格納

Yoshi0576

総合スコア3

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2020/06/19 21:50

前提・実現したいこと

B列が"Yes"となっている行(1行又は複数行)にあるデータを配列に格納し、編集しメールで送信したい。
イメージ説明

発生している問題・エラーメッセージ

"Yes"と入力されているセルの行数を特定する事は出来るのですが、複数行の情報を配列に格納する方法が分かりません。

該当のソースコード

GAS

1function LogReport(){ 2 3 const spread = SpreadsheetApp.getActiveSpreadsheet() ; 4 const sheetActive = spread.getActiveSheet(); 5 const dataRange = sheetActive.getDataRange(); 6 const values = dataRange.getValues(); 7 8 for (var i = 0; i < values.length; i++) { 9 var data = ""; 10 if (values[i][1] == "Yes") { 11 data = values[i]; 12 Logger.log(data); 13 Logger.log(i); // "i"が行数を取得 14 } 15 } 16}

試したこと

上記のコードで変数iが条件に合う行数を取得出来る事は理解出来ましたが、活用する方法が分かりません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

単純にfor文の外のスコープで結果を格納する変数を定義し、そこにB列が"Yes"だった場合に追加するだけです。
getDataRangeだとヘッダー行も含んでしまうので、データ取得範囲を明示して含まないように変更しています。

JavaScript

1function LogReport() { 2 const spread = SpreadsheetApp.getActiveSpreadsheet(); 3 const sheetActive = spread.getActiveSheet(); 4 5 //ヘッダー行を除くように変更 6 // const dataRange = sheetActive.getDataRange(); 7 const firstRow = 4; 8 const rowCount = sheetActive.getLastRow() - firstRow + 1; 9 const dataRange = sheetActive.getRange(firstRow, 1, rowCount, 8); 10 11 const values = dataRange.getValues(); 12 13 const result = []; //フィルタした結果を格納する配列 14 for (var i = 0; i < values.length; i++) { 15 if (values[i][1] == "Yes") { 16 result.push(values[i]); 17 } 18 } 19 20 console.log(JSON.stringify(values)); 21}

Array.prototype.filter使えばもっとシンプルに書けます。

JavaScript

1 const result = values.filter(rowData => rowData[1] === "Yes");

投稿2020/06/19 23:05

draq

総合スコア2577

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

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

Yoshi0576

2020/06/20 16:37

ありがとうございました! ご指摘の通りfor文の中で処理を行うべきだと考えていた事が誤りでした、勉強させて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問