【Google Apps Script】シートから一致する日付をしぼり込む方法⑤

記事
IT・テクノロジー
前回の記事では、日付の記載がある行だけを絞り込むことができました。
シートの先頭の空行や見出しを飛ばしてデータを取得するほか、行の途中で空行などがあった場合にも、日付のデータだけを取得することに成功しましたね(´∀`*)
今回でこの連載も終了となります。
前回は.filter()メソッドを使って、A列に日付のデータがある行だけを抽出しました。
さてこの連載の最終目的に立ち返ってみましょう。
このような↓データの中から、
3-1.png
一致する日付の行だけを抽出する、もしくは〇日~〇日まで、といったようなある期間に該当する行を抽出するというのが目的でした。

実は、これも.filter()メソッドと、これまでに学んできたことを応用すればとても簡単に実現することができます。

日付の比較をするには、.getTime()メソッドを使うのでしたね。
それを、前回作成したコードに応用してみましょう。
↓前回のコード
const filtered = whole_sheet.filter(function (element) {
    return typeof element[0] == 'object';
});
上記のコードでは、2行目の typeof element[0] == 'object' がTrueとなるとき、つまり「A列の値がオブジェクト型である」という条件に一致するものだけを抽出し、filteredという新しい配列を作成したのでした。

では typeof element[0] == 'object' という条件に、さらにもう一つの条件を追加したらどうでしょうか?
そうなんです! それができちゃうんです(∩´∀`)∩
5-1.png

B1セルに日付の入力欄を作りました。
「B1セルと日付が一致する時」という条件を、先ほどのコードに追記してみましょう!
const day = ss.getRange('B1').getValue();

    return typeof element[0] == 'object' && element[0].getTime() == day.getTime();  });
1行目で、dayという日付をB1セルに格納します。
それから3行目で、「element[0].getTime()」と「day.getTime()」とが一致する時」という条件式を追加します。
(element[0]にはA列の値が格納されます。詳しくは前回の記事をお読みください)
こうすることで、「A列が日付のもの & B1セルと日付が一致するもの」という条件で絞りこむことに成功しました!
ログを見てみましょう。
5-2.png
無事、B1セルに入力した日付と同じデータが抽出されていますね(*^-^*)

では「〇月〇日から○月〇日まで」という条件で絞りこむにはどうしたらいいでしょうか?
5-3.png

シートのほうにはこのように、B1からD1までという形式で二つの日付を入力できるようにしました。
続いて修正したコードはこちらです。
  const day_from = ss.getRange('B1').getValue();
  const day_to = ss.getRange('D1').getValue();
  day_to.setDate(day_to.getDate()+1);

    return typeof element[0] == 'object' && element[0].getTime() >= day_from.getTime() && element[0].getTime() < day_to.getTime();  });

day_fromとday_toという二つの変数に、開始日と終了日を入れています。
day_toのほうに.setDate(day_to.getDate()+1)とついているのは、終了日を+1しているからです。
なぜかというと、D1セルの2021-01-06までとなっているのは、1月6日の0時のことだからです。「1月6日の0時まで」というのは、実質「1月5日まで」というのとほぼ同じことになってしまいますよね💦
現在のシートでは日付のみなので問題はないかもしれませんが、もし日付+時間のデータが入っていた場合にはかなり問題です。たとえば1月6日の9時のデータだったら、除外されてしまいます(;゚Д゚)
ですので日付に+1をすることで、「1月7日の0時未満」という指定をしているんですね。
day_to.setDate(day_to.getDate()+1)というような使い方はある種お決まりのパターンなのですが、慣れないとちょっと難しいかもしれません。
代わりに.setHoursを使って、<= day_to.setHours(23,59,59,999)、つまり1月6日の23時59分59秒999マイクロ秒以下、としてもおなじことかと思います(ちょっとかっこ悪い感じはするかも(;'∀')?)

さぁ、これで実行してログを確認しましょう!
5-4.png
成功です!
きちんと4日~6日までの日付が取得できています~(☆´∀`)//""パチパチ
あとはこのデータを他の場所に貼り付けるなりなんなりすれば、もう日付の抽出も怖くありません!

思ったよりも長々とした連載になってしまいましたが(笑)
最後までお付き合いいただきありがとうございました<(_ _)>


↓出品中のサービス

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す