いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)直近のx曜日の日付を求める

 Googleスプレッドシートで、「指定した日からみて直近の○曜日」の日付を求める方法についてです。
 指定した日の曜日と目的の曜日を比較して日付を足し算する方法が有名ですが、わかりにくくなりやすいのでここでは少し変わった方法を示します。
 また、「直近」として当日を含まない場合と含む場合をそれぞれ示します。

  • 向こう7日間の日付に対してFILTER関数を使うことで、直近のn曜日の日付を求めることができます。

手順

当日を含まない場合

f:id:accs2014:20200628143108p:plain:right:w550

 C2セルに「2020/7/1」という日付が入力されています。なお、この日は水曜日です
 この日からみて直近の各曜日を求めるものとします。ただし「直近」には当日を含まないものとします。

 C5からC11の各セルに次のように入力します。

 C5~C11セル(直近の日曜~土曜の日付)

=FILTER(SEQUENCE(7,1,C2+1),WEEKDAY(SEQUENCE(7,1,C2+1))=1)
=FILTER(SEQUENCE(7,1,C2+1),WEEKDAY(SEQUENCE(7,1,C2+1))=2)
=FILTER(SEQUENCE(7,1,C2+1),WEEKDAY(SEQUENCE(7,1,C2+1))=3)
=FILTER(SEQUENCE(7,1,C2+1),WEEKDAY(SEQUENCE(7,1,C2+1))=4)
=FILTER(SEQUENCE(7,1,C2+1),WEEKDAY(SEQUENCE(7,1,C2+1))=5)
=FILTER(SEQUENCE(7,1,C2+1),WEEKDAY(SEQUENCE(7,1,C2+1))=6)
=FILTER(SEQUENCE(7,1,C2+1),WEEKDAY(SEQUENCE(7,1,C2+1))=7)

 「SEQUENCE(7,1,C2+1)」という部分が2か所あり、これは翌日から7日間の日付を列挙しています。
 つまり、向こう7日間の日付からFILTER関数を使って目的の曜日(日曜=1,月曜=2……土曜=7)であるものを抽出する、というわけです。
 

f:id:accs2014:20200628142637p:plain:right:w400

 式を確定すると日付がシリアル値(数値)で表示されます。
 あとは書式を日付に改める(範囲を選択してメニューから「表示形式」→「数字」→「日付」と進む)と……
 

f:id:accs2014:20200628142642p:plain:right:w400

 完成です。

 式はやや長いものの、起点となる日の曜日を考慮しなくてよいため(次の例のような)設定変更が容易であることがメリットです。

当日を含む場合

f:id:accs2014:20200628142649p:plain:right:w550

 基本的に上記の例と同じく、C2セルの「2020/7/1」という日付からみた直近の各曜日を求めるものとします。
 ただし「直近」には当日を含むものとします。

 C5からC11の各セルに次のように入力します。

 C5~C11セル(直近の日曜~土曜の日付)

=FILTER(SEQUENCE(7,1,C2),WEEKDAY(SEQUENCE(7,1,C2))=1)
=FILTER(SEQUENCE(7,1,C2),WEEKDAY(SEQUENCE(7,1,C2))=2)
=FILTER(SEQUENCE(7,1,C2),WEEKDAY(SEQUENCE(7,1,C2))=3)
=FILTER(SEQUENCE(7,1,C2),WEEKDAY(SEQUENCE(7,1,C2))=4)
=FILTER(SEQUENCE(7,1,C2),WEEKDAY(SEQUENCE(7,1,C2))=5)
=FILTER(SEQUENCE(7,1,C2),WEEKDAY(SEQUENCE(7,1,C2))=6)
=FILTER(SEQUENCE(7,1,C2),WEEKDAY(SEQUENCE(7,1,C2))=7)

 「SEQUENCE(7,1,C2)」という部分が2か所あり、当日を含む7日間の日付を列挙しています。
 当日を含む7日間の日付からFILTER関数を使って目的の曜日であるものを抽出する、というわけです。
 

f:id:accs2014:20200628142654p:plain:right:w400

 確定後、書式を日付に変更した結果です。
 水曜日の結果が最初の例と異なり、当日(2020/7/1)になっているのが分かります。


直前のx曜日を求める場合

 上記の式中、SEQUENCE関数の第3引数(2か所)を「C2-7」に変えれば当日を含まない直前のx曜日を、「C2-6」に変えれば当日を含む直前のx曜日を求めることができます。