エクセルで日付や時間に関する関数は数多くあり場面によって使い分けが必要です。
日付関数だけでも並べてみると
『TODAY』『DAY』『MONTH』『YEAR』『DATE』『DATEVALUE』『DAYS』『DATEDIF』『EDATE』『EOMANTH』『WEEKDAY』
ここまで多いのには理由があります。
一つにデータ上の日付は様々な形式で記録されているからです。
日付形式のyyyy/mm/ddと数値形式のyyyymmddが代表的です。
更に全世界で共通の日付として1900年1月1日を1としてそこからの日数で表すシリアル値があります。また、実務的にも様々な日付の表示が発生するため関数がここまで多いのだと思います。
今日の日付を返す関数
今日の日付を返す関数はそのままTODAY関数です。
この関数には引数がありません。なので記述する場合は=TODAY()となります。
返ってくるのは日付のシリアル値が返ってきますのでセルの書式によって表示が変わってきます。
またシリアル値は単純に数値なので他の数値をプラスしたりマイナスすることも可能です。
その場合加減する数字は1が1日として扱われます
書類を作成する場合には右上に作成日付を入れるのは常識ですので、よく使われると思います。
日、月、年を返す関数
DAY、MONTH、YEARの3つの関数はそれぞれに『DAY関数は日』を『MONTH関数は月』を『YEAR関数は年』を数字で返します。
使い方としては=DAY(シリアル値)の様に引数としてシリアル値が入りますので、日付が入っている
セルを入れてあげます。
しかし上記の様にセルに年月日が表示されていても日付(シリアル値)の場合と文字の場合があります。
その場合は数式バーを確認するか、『メニューリボン』『ホームタブ』の数値グループにセルの表示形式が表示されるので確認してみて下さい。
またもう一つの方法はショートカット[Ctrl]+[Shift]+[1]で数値にセル書式を設定した時にシリアル値に変われば日付です。
ショートカットキーでセル書式を変更して確認したら[Ctrl]+[Z]で元に戻しましょう。
MONTH関数とYEAR関数はDAY関数と使い方はほぼ同じです。
日付(シリアル値)を返す関数
DATE関数は年、月、日が別々に保存されているデータや表から日付(シリアル値)を生成する関数す。
引数は =DATE(年,月,日)となっています。年、月、日は2022,8,12の様な実数でもセル参照でもどちらも可能です。
DATE関数は年月日の数値から日付(シリアル値)を生成しますがDATEVALUE関数は日付文字列から日付(シリアル値)を生成する関数です。
引数は=DATEVALUE(日付文字列)で見た目は日付でも本来のシリアル値の日付ではない文字列で保存された値を入れます。
上表のA5セルに入っているのは日付に見えている文字列ですが、DATEVALUE関数はこれを日付(シリアル値)に変換してくれます。
引数はセル指定でも直接入力でも可能です。直接入力する場合は文字列ですので、”2022/8/12″の様にダブルクォーテーションで囲います。
期間の日数を返す関数
〇月〇日と△月△日の間は何日あるのかを返してくれるのがDAYS関数です。
引数としては=DAYS(終了日,開始日)で日数が返ってきます。しかし、この関数は現在はあまり使われることはありません。
というのも終了日と開始日はシリアル値ですから普通に終了日マイナス開始日で同じ答えが出せてしまうからです。
期間の年数、月数、日数を返す関数
DATEDIF関数は指定した期間の年数、月数、日数を返す関数です。
引数は=DATEDIF(開始日,終了日,単位)で開始日と終了日は勿論、日付(シリアル値)でセル指定でも直接入力でも可です。
日付を直接入力する場合は”2022/8/12″の様にダブルクォーテーションで囲って下さい。
上記の様に名簿で年齢を表示する場合などに使える関数で、最後の引数である単位によって結果が違ってきます。
- “Y” 期間の年数
- “M” 期間の月数
- “D” 期間の日数
- “YM” 年を無視し開始日から終了日までの月数
- “YD” 年月を無視し開始日から終了日までの日数
単位による結果はそれぞれ上記の表の様になりますので使い方によっては非常に使える関数です。
DATEDIF関数はどうもエクセルの正規の関数では無い様で『関数の挿入』ダイアログには表示されません。
別な月の同じ日、別な月の月末
別な月の同じ日を返してくれるのはEDATE関数
引数は=EDATE(開始日,月数)となっています。
『開始日』は勿論『シリアル値』で、月は『0』が同月『1』が翌月、そして『-1』は前月となります。今日の2か月後の同時だと=EDATE(TODAY(),2)となります.
私がこの関数を使う場面は、月が横並びの一覧表の項目などで使っています。以外と頻繁に使う関数の一つかもしれません。
指定した月に同じ日が無い時、例えば1月30日の翌月の同日は本来存在しません。この場合は2月末日が返ってきます。
次にEDATE関数同様に頻繁に使うEOMONTH関数を解説します。
引数は=EOMONTH(開始日,月数)とEDATE関数と同じですが、EDATE関数が「同日を返す」のに対しEOMONTH関数は「指定した月の月末日」が返って来ます。
月数の指定方法はEDATE関数と考え方は同じです。
私がよく使う場面は『月初日を表示させたい』時で、EOMONTH関数で月末を求めてその値に『1』を加えて月初日すなわち『1日』を求めます。
月別の表を作る時に文字列で月を表示しても良いとは思いますが、可変させたり他の関数で使用することを考えると、各月に必ずある『1日』を使うのがベターだと思います。
上のサンプルは赤枠の数値を変更するだけで、各月の『1日』を算出し表示形式で年月表示しています。(1月1日は固定なのでDATE関数で=DATE(B1,1,1)としています。)
実はもう一つWORKDAY関数というのがあり、俗に言う営業日だけを返すという仕事をしている方々には嬉しい関数です。「土日は休みじゃないし」という方にも対応出来る関数も。ちょっと複雑になるので別枠で解説します。