質問するログイン新規登録

回答編集履歴

2

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

2022/10/28 06:17

投稿

bebebe_
bebebe_

スコア520

answer CHANGED
@@ -1,43 +1,26 @@
1
- 少し雑な部分があかもしれませんがこんな感じだとどでしょうか
1
+ 2日より前の日付で判定すに変更
2
2
  ```ここに言語を入力
3
- function HideRowsBeforeToday() {
3
+ function HideRows2dayBefore() {
4
4
 
5
5
  const ss = SpreadsheetApp.getActiveSpreadsheet();
6
6
  const s = ss.getSheetByName('シート1'); // シート名で指定
7
- const values = s.getRange('E:E').getDisplayValues().flat(); //E列に日付けが入っているので、表示値を配列で取得。
8
-
9
- var dt = new Date(); //現在の日時を取得
10
- dt.setDate(dt.getDate()-2);
7
+ const lastRow = s.getLastRow();
11
- var d2 = Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy/MM/dd'); //2日前の日付に
12
-
13
- //後続でIndexOfするので、それぞれ文字列にする。
14
- const arrayDateToString = values.map(String);
15
-
16
- //一昨日の日付のindexを取得
17
- const indexOf2DaysBefore = arrayDateToString.indexOf(d2);
18
-
19
- //1行目から一昨日までの行を非表示する。
20
- s.hideRows(1, indexOf2DaysBefore);
21
- }
22
- ```
23
- 元々のコードを使った場合
24
- ```ここに言語を入力
25
- function HideRowsBeforeToday() {
26
-
27
- const ss = SpreadsheetApp.getActiveSpreadsheet();
28
- const s = ss.getSheetByName('シート1'); // シート名で指定
29
- const values = s.getRange('E:E').getValues(); //E列に日付けが入っているので、配列で取得。
8
+ const values = s.getRange(1,5,lastRow,1).getValues(); //E列に日付けが入っているので、入力がある最終行まで配列で取得。
30
9
  const dt = new Date(new Date().setHours(0, 0, 0, 0)); //本日の0時の日付を作成
31
10
  dt.setDate(dt.getDate()-2); //日付を-2
11
+ var hiderow = 0 //非表示にする行
32
12
 
33
- //後続でIndexOfするので、それぞれ文字列にする。
34
- const arrayDateToString = values.map(String);
13
+ for (let i = 0 ; i < values.length ; i++) {
35
- const dayToString = Utilities.formatDate(dt, 'JST', "E MMM dd yyyy HH:mm:ss 'GMT'Z '(Japan Standard Time)'");
14
+ if(values[i][0] > dt){ //2日前の日付とセルの日付を比較
15
+ hiderow = i //2日前でないセルの行番号を取得
16
+ break;
17
+ }
18
+ };
36
19
 
20
+ if (hiderow >= 1){
21
+ s.hideRows(1, hiderow); //1行目から取得した行までを非表示する。
22
+ }else{
37
- //一昨日日付のindexを取得
23
+ //行が見つからなかった場合処理
38
- const indexOf2DaysBefore = arrayDateToString.indexOf(dayToString);
39
-
40
- //1行目から一昨日までの行を非表示する。
24
+ }
41
- s.hideRows(1, indexOf2DaysBefore);
42
25
  }
43
26
  ```

1

コード追加

2022/10/28 00:00

投稿

bebebe_
bebebe_

スコア520

answer CHANGED
@@ -19,4 +19,25 @@
19
19
  //1行目から一昨日までの行を非表示する。
20
20
  s.hideRows(1, indexOf2DaysBefore);
21
21
  }
22
+ ```
23
+ 元々のコードを使った場合
24
+ ```ここに言語を入力
25
+ function HideRowsBeforeToday() {
26
+
27
+ const ss = SpreadsheetApp.getActiveSpreadsheet();
28
+ const s = ss.getSheetByName('シート1'); // シート名で指定
29
+ const values = s.getRange('E:E').getValues(); //E列に日付けが入っているので、配列で取得。
30
+ const dt = new Date(new Date().setHours(0, 0, 0, 0)); //本日の0時の日付を作成
31
+ dt.setDate(dt.getDate()-2); //日付を-2
32
+
33
+ //後続でIndexOfするので、それぞれ文字列にする。
34
+ const arrayDateToString = values.map(String);
35
+ const dayToString = Utilities.formatDate(dt, 'JST', "E MMM dd yyyy HH:mm:ss 'GMT'Z '(Japan Standard Time)'");
36
+
37
+ //一昨日の日付のindexを取得
38
+ const indexOf2DaysBefore = arrayDateToString.indexOf(dayToString);
39
+
40
+ //1行目から一昨日までの行を非表示する。
41
+ s.hideRows(1, indexOf2DaysBefore);
42
+ }
22
43
  ```