質問するログイン新規登録
Google スプレッドシート

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

Google Apps Script

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

Q&A

解決済

1回答

791閲覧

Google スプレッドシートの以前の日付の行を非表示にする

modd21

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/10/27 07:17

編集2022/10/28 05:14

0

0

スプレッドシートのE列に日付を入力し、
2日前以前の行を非表示にしたく、
下記のコードを作成しましたが、
エラーが出てしまいます。
「エラー Exception: Those rows are out of bounds.」

初心者のため色々ググってはみましたが、
解決できません。。
どの様に修正すればいいでしょうか><

作成しましたコードは下記です

function HideRowsBeforeToday() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const s = ss.getSheetByName('シート1'); // シート名で指定 const values = s.getRange('E:E').getValues(); //E列に日付けが入っているので、配列で取得。 const today = new Date(new Date().setHours(0, 0, 0, 0)); //本日の0時の日付を作成 //後続でIndexOfするので、それぞれ文字列にする。 const arrayDateToString = values.map(String); const todayToString = Utilities.formatDate(today, 'JST', "E MMM dd yyyy HH:mm:ss 'GMT'Z '(Japan Standard Time)'"); //今日の日付のindexを取得 const indexOfToday = arrayDateToString.indexOf(todayToString); //1行目から前日までの行を非表示する。 s.hideRows(1, indexOfToday- 2); }

イメージ説明

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

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

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

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

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

bebebe_

2022/10/27 07:28

E列に今日の日付が含まれていますか?
modd21

2022/10/27 07:39

今日の日付は含まれていませんでした。 今日の日付も含まれていないといけないのでしょうか・・・
guest

回答1

0

ベストアンサー

2日より前の日付で判定するように変更

function HideRows2dayBefore() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const s = ss.getSheetByName('シート1'); // シート名で指定 const lastRow = s.getLastRow(); const values = s.getRange(1,5,lastRow,1).getValues(); //E列に日付けが入っているので、入力がある最終行まで配列で取得。 const dt = new Date(new Date().setHours(0, 0, 0, 0)); //本日の0時の日付を作成 dt.setDate(dt.getDate()-2); //日付を-2 var hiderow = 0 //非表示にする行 for (let i = 0 ; i < values.length ; i++) { if(values[i][0] > dt){ //2日前の日付とセルの日付を比較 hiderow = i //2日前でないセルの行番号を取得 break; } }; if (hiderow >= 1){ s.hideRows(1, hiderow); //1行目から取得した行までを非表示する。 }else{ //行が見つからなかった場合の処理 } }

投稿2022/10/27 08:09

編集2022/10/28 06:17
bebebe_

総合スコア520

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

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

modd21

2022/10/27 11:57

ありがとうございます。 試してみましたところ、まったく同じエラーが出てしまいました。。 (Exception: Those rows are out of bounds) 記述とは別の問題なのでしょうか。。(スプレッドシート側等)
bebebe_

2022/10/28 00:03

セルの表示されてる値が「2022/10/28」のような表記だという前提で考えちゃってました。 質問文のコードで今日の日付があれば動作していたなら追記したコードで動くと思います。
modd21

2022/10/28 00:37

ありがとうございます! スプレッドシート上の日付の表記は「2022/10/20」です。 修正頂いたコードにしてみましたが、やはり同じ「Those rows are out of bounds.」 となってしまいます。。。><
bebebe_

2022/10/28 01:12 編集

質問文のコードで今日の日付があった場合は動作していましたか? 後同様に2日前の日付がありますか?
modd21

2022/10/28 05:10

何度も申し訳ございません! 質問文のコードに戻して再度動かしてみましたところ、エラーはでませんでしたが、 (本日の日付、2日以前の日付両方あり) 該当するはずの行がすべて消えませんでした。。 キャプチャを質問文へ添付しますが、 本日(10/28)ですと、1行目~4行目までが消えてほしいのですが、 非表示になるのは上2行だけでした。。。 お手数をおかけしますがよろしくお願いいたします。
bebebe_

2022/10/28 06:25

あー連続した日付が入ってるわけではないんですね。 元々のコードだと今日の日付のセルを見つけてその上2行までを非表示にするといった動作になっていたので今日の日付が必要で貼られた画像で言えば今日の日付の上2行である1-2行目が非表示になってました。
modd21

2022/10/28 06:25

ありがとうございます!!( TДT) 直して頂いたコードにしました所思うように動きました! 大分修正が必要でしたね。。 bebebe_さんの様にコードを作成できる様に頑張りたいです! 感謝です><
modd21

2022/10/28 06:26

なるほどです。。。
bebebe_

2022/10/28 06:31

一つ確認してなかったんですが今日(10/28)の場合に10/26は表示するのであれば if(values[i][0] > dt){ のところは if(values[i][0] >= dt){ になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問