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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

736閲覧

【GAS】スプレッドシートのデータを、「条件付きで読み込み→集計する」という作業をデータがなくなるまで繰り返すプログラムを作成しております。

tanaka_444

総合スコア19

Google スプレッドシート

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

Google Apps Script

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

0グッド

1クリップ

投稿2021/12/11 12:15

前提・実現したいこと

①項目1が切り替わるまでの行数分、C列を読み込む(この図で説明すると1回めは、Aの項目)
②ステータスの判定を行う
③②のステータス判定が終われば、次の項目1にまつわる処理を、①と同じように読み込む
④項目1がなくなるまで①②を繰り返す
というプログラムを作成しようとしているのですが、(以下の図を参照ください)

イメージ説明

上記のようにデータを読み込む作業を繰り返すには、どのようにプログラムを書けばよいかわからず
困っています。
図は一例で、日によって項目1にまつわる行数(データ量)は変動します。

全くわからないので、もし分かる方がいらっしゃいましたら教えてください。
(②のステータス判定部分は、やりたいことの流れをお伝えするために入れているので、具体的な流れはここでは控えます)
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

処理対象のシートについて、以下の2点

  • ヘッダ行が1行目にあり、データ行は2行目から始まる。
  • 最終行の次の行では、B列(確認者)のセルが空欄である。

を前提として、以下のようにするとよいかと思います。

GAS

1function main() { 2 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 3 4 let statusValues = null; 5 let currentItem1 = null; 6 7 for (let row = 2; ; row ++) { 8 const [[item1, name, status]] = sheet.getRange(`A${row}:C${row}`).getValues(); 9 10 if (!name) { 11 checkStatusValues(currentItem1, statusValues); 12 break; 13 } 14 15 if (item1) { 16 if (currentItem1) { 17 checkStatusValues(currentItem1, statusValues); 18 } 19 currentItem1 = item1; 20 statusValues = []; 21 } 22 23 statusValues.push(status); 24 } 25} 26 27// 項目1とステータスの配列を引数に受け取って何らかの処理を行う関数 28function checkStatusValues(item1, statusValues) { 29 console.log('check:', item1, statusValues); 30} 31

実行例:
イメージ説明

投稿2021/12/11 17:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tanaka_444

2021/12/12 03:04

ご回答とても助かります。ありがとうございますm(_ _)m checkStatusValues(currentItem1,statusValues) は、currentItem1とstatusValuesを参照するという意味になりますでしょうか? checkStatusValuesの意味が分からなかった(ネット検索しても出てこなかった)ため、教えてください。 よろしくお願いします。
退会済みユーザー

退会済みユーザー

2021/12/12 03:40

コメントありがとうございます。 > checkStatusValuesの意味が分からなかった とのことで私の説明不足でした。 checkStatusValues() は、回答したコードの最後にある下記の関数です。 // 項目1とステータスの配列を引数に受け取って何らかの処理を行う関数 function checkStatusValues(item1, statusValues) { console.log('check:', item1, statusValues); } この関数は、ご質問に > ②ステータスの判定を行う とお書きになっている、何らかの処理を行うことを想定したもので、この関数の名前が checkStatusValues というものである必要はないので、適宜、変えていただければと思います。回答のコードで示したかったことは、main関数の中で checkStatusValues 関数を呼んでいるところで、項目1の値が同じとみなされる行のステータスの値が配列 statusValues に蓄積されているので、これをひとまとまりの処理に渡すことができるという点です。
tanaka_444

2021/12/12 09:41

なるほど・・・理解できました。 ご丁寧に説明ありがとうございます。 知識不足で申し訳ないです。 実は、今回質問させていただいた、「何らかの処理の部分」にあたるのですが、 やりたいこととして続きがあるので、 もし分かればお手隙の際に、先ほど投稿した以下のものも ご確認いただくことできますでしょうか? → 【GAS】複数条件がある場合のステータス集計(データの集計)を自動化しようとしているのですが、分からないためどなたか教えてください。 よろしくお願いしますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問