8/18/2023

Excel。カレンダーの末日問題はSEQUENCE関数の登場で、劇的に変わりました。【last day】

Excel。カレンダーの末日問題はSEQUENCE関数の登場で、劇的に変わりました。

<SEQUENCE+DATE関数>

カレンダーを作るときに、いつもネックになるのが、末日問題。


例えば、3月なら31日。

2月のうるう年なら29日までの表示にしたいわけです。


単純に上のセルを「+1」すると、翌月1日が表示されてしまうので、様々な条件を考えて、IF関数をつかうなどして、対応していました。


ところが、SEQUENCE関数という新しい関数が登場したことで、全く考え方が変わりました。


このSEQUENCE関数は、指定した回数の連番を設定することができます。


SEQUENCE関数がどのような関数なのかを確認しておきます。


A1に、

=SEQUENCE(5)

と設定しました。

SEQUENCE関数

すると、A1:A5に1からの連番を設定してくれました。

A1に設定した数式は、スピル機能によって、自動的に数式が拡張されます。

(A2:A5はゴースト)


引数に5と設定したので、5までの連番を設定してくれたわけです。


つまり、引数にDAY関数をつかってあげれば、日にち分の連番を入力してくれるはずです。


そこで、年月をセルに用意して、簡易カレンダーを作ってみました。

カレンダーの末日

A1には、年を設定します。「2024」としました。

A2には、月を設定します。「2」としました。

2024年2月は、うるう年なので29日まであります。


A5にSEQUENCE関数をつかって設定した数式は、

=SEQUENCE(DAY(DATE(A1,A2+1,0)))


これで、日にちが表示されます。


また、曜日も連動させたいので、

B5には、

=TEXT(DATE(A1,A2,A5#),"aaa")

という数式を設定します。


これで、完成です。


SEQUENCEをつかうことで、末日問題から、少しは逃げることができるかもしれませんね。


それでは、数式の内容を確認しておきましょう。


=SEQUENCE(DAY(DATE(A1,A2+1,0)))

引数の、列に設定してあるのが、DAY関数をつかって、「日」を抽出しています。


それが、

DAY(DATE(A1,A2+1,0))


DATE関数をつかって日にちをつくるわけですが、「月」を「月+1」として「日」を「0」とすることで、前月の末日をつくることができます。


そして、算出した日付の日をDAY関数で、抽出することで、末日の数値を抽出することができるというわけです。


あとは、曜日の数式です。

=TEXT(DATE(A1,A2,A5#),"aaa")


なんで、A5を参照しないで、改めてDATE関数をつかって、日付をつくっているのかというと、SEQUENCE関数は、日付ではなくて、数値を算出しています。


そのため、新たに、DATE関数をつかって日付を作る必要があります。


また、算出された結果を、オートフィルで数式をコピーするよりも、スピル機能をつかって、自動的に末日と連動させたいので、

DATE(A1,A2,A5#)

の引数の「日」を「A5#」と設定します。


今回紹介したSEQUENCE関数をはじめ、新しく追加された関数を知ることで、今まで色々考えないといけなかった数式がシンプルにすることができるかもしれませんね。