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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

2901閲覧

【GAS】forの中でforを使うやり方が理解できません

aRyo

総合スコア23

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/01/11 00:27

編集2022/01/11 02:38

●やりたい事流れ
同じ日にちごとに処理を流したい
例えば、1月3日の日にちとカテゴリーの表部分をコピペして別の場所で処理
次に1月17日で同様の処理を行う
上記のように日にちが続く限り同様の処理を流したいと思っています。

![イメージ説明

前回の質問で、列情報を取り出すやり方を教えてもらいました。
https://teratail.com/questions/376991

これを踏まえてコードを書いてみたのですが、同じ日にちごとに処理が回りません。
なぜでしょうか。
あと、日にちが続く限り処理を回す方法も分かりません。
なので、とりあえず”j=10”として、10回分まわるようにしています。

GAS

1function myFunction() { 2 //1. 現在のスプレッドシートを取得 3var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4//2. フォームの回答 シートを取得 5var sheet = spreadsheet.getSheetByName('計画書'); 6const lastRow = sheet.getLastRow(); 7var count = 0; 8var count2 = 0; 9for(var j = 0 ; j <= lastRow; ++j) { 10 currentRow = 2 11for(var i = currentRow ; i <= lastRow; ++i) {///////////////////////currentRowを、次の日にちに変更させたい 12 var range1 = sheet.getRange(i, 1); 13 var value1 = range1.getValue(); 14 var range2 = sheet.getRange(i+1, 1); 15 var value2 = range2.getValue(); 16 //ログに出力 17 Logger.log(value1); 18 Logger.log(value2); 19 count++ 20 if ( value1  !=  value2) 21break; 22} 23 24 25count2++ 26Logger.log("i:"+i); 27Logger.log("count:"+count); 28Logger.log("count2:"+count2); 29 var date = sheet.getRange(i-count+1, 2, count, 5); 30 var sheet2 = spreadsheet.getSheetByName('指示書(サンプル)'); 31 sheet2.copyTo(spreadsheet); 32 var sheet3 = spreadsheet.getSheetByName('指示書(サンプル) のコピー'); 33 sheet3.setName("指示書"+count2); 34 const range_to = sheet3.getRange("A5"); 35 //アクティブなセルに貼付け 36 date.copyTo(range_to, {contentsOnly:true}); 37 38 var cell = sheet3.getRange("A2:F10"); 39 cell.setHorizontalAlignment("center"); 40 cell.setVerticalAlignment("middle"); 41 42 43}} 44

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

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

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

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

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

itagagaki

2022/01/11 01:05

助言ですが、まずインデントを正しく整形するべきです。 あと「日にちが続く」「同じ日にち」といった言葉の意味が私にはよくわかりません。違う言葉で説明できますか?
guest

回答1

0

ベストアンサー

手作業でやるならどういう手順でやるかと考えてみると、だいたい

  1. 2行目の日にちの値を覚える
  2. 覚えた値と異なる同じ日にちの行を下方向に探す。
  3. 異なる日にちか空行があったら、2行目から今見ている行の上の行までをまとめて処理する
  4. 今見ている行が空行なら終わり
  5. 今見ている行の日にちを覚える
  6. 覚えた値と異なる同じ日にちの行を下方向に探す。
  7. 異なる日にちか空行があったら、ステップ5の行から今見ている行の上の行までをまとめて処理する
  8. 今見ている行が空行なら終わり
  9. 今見ている行の日にちを覚える
  10. ...

こんな感じになるのではないでしょうか。これをコードにするなら、4ステップ毎が外側のループで、ステップ2・6が内側のループです。

もう少しコードに近い表現にすると、

  1. 変数 currentRow2 で初期化
  2. currentRowlastRow 以下の間 while ループ
  3. 変数 currentDatecurrentRow の1番目のカラムの値で初期化
  4. 変数 rowcurrentRow + 1 から lastRowfor ループ
  5. row の1番目のカラムの値が currentDate と異なるならループ終了
  6. (内側のループはここまで)
  7. currentRow から row - 1 の間の行をまとめて処理
  8. currentRowrow を代入
  9. (外側のループはここまで)

投稿2022/01/11 01:02

編集2022/01/11 05:56
int32_t

総合スコア21695

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

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

aRyo

2022/01/11 02:49

ご回答ありがとうございます。 2の「currentRow が lastRow 以下の間 while ループ」部分が、理解できません。 前回の質問の方法で別の日の列を抽出し、繰り返し処理できないのでしょうか。 頭の中で整理出来ていなかったので、再度作りなしました。 その中で、どうしても分からない点として”for(var i = 2 ; i <= lastRow; ++i) {}”の部分です。 せっかく繰り返し処理で次の日にちを抽出しても初期化式に代入?する方法が分かりません。 ここの部分で、おっしゃったwhileのコードが必要なのかなと考えているのですが、合っていますでしょうか。 お手数をおかけしますが、返信いただけると幸いです。
int32_t

2022/01/11 03:03

現在のコードを尊重するなら、 for(var j = 0 ; j <= lastRow; ++j) { currentRow = 2 を let currentRow = 2; while (currentRow <= lastRow) { ... currentRow = i + 1; } こんな感じにすると良いんじゃないでしょうか。
aRyo

2022/01/11 05:52

出来ました!! 本当にいつもありがとうございます! 恐らくまだまだ未熟なため、これからもお世話になるかと思います。 その時、またよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問