わえなび ワード&エクセル問題集

当サイトはWordとExcelの実力を鍛える最高水準の特訓問題集です。リンクを張るのは自由です。みんなで勉強しましょう!

【Excel日付】月単位や年単位の加算、EDATE関数の使い方基本編

EDATE関数(イーデイト)は、指定された日付から数か月後、または数か月前の日付を求める関数です。月単位または年単位で日付を計算することができます。

ところで、EDATE関数は、DATE関数と名前が似ていますが、DATE関数とは全く関係ありません。EDATEとは、Expiration Date(エクスピレーション・デイト)の略と言われており、有効期限や満期日という意味です。お金の支払いに限らず、食品の有効期限や製品の保証期間などの期日は、通常「月単位」「年単位」で計算するため、このような関数名になっているのではないか考えられます。

そこで、今回は、EDATE関数の基本的な使い方について解説します。

目次

1.EDATE関数の基本

(1)1か月後の日付、数か月後の日付

問題

セルA1に入力した日付の1か月後の日付を求めなさい。また、3か月後の日付を求めなさい。

f:id:waenavi:20200406125643j:plain

 

解説

セルA1に入力されている日付はシリアル値です(参考:【Excel】日付の「シリアル値」を本気で理解するには何を練習するべきか?)。EDATE関数は基準となる日付加算する月数を指定します。月は数値で指定します。

  • =EDATE(起算日,月)

1か月後の日付は第2引数を1にします。関数の戻り値は日付のシリアル値です。

  • =EDATE(A1,1)

f:id:waenavi:20200406132833j:plain

 

したがって、表示形式を変えることによって、求める日付になります(以下、同じ)。

f:id:waenavi:20200406132917j:plain

 

また、3か月後の日付は3です。月を加算したことによって翌年以降の日付になることもあります。

  • =EDATE(A1,3)

f:id:waenavi:20200406132945j:plain

 

(2)表示形式

問題

セルA1は西暦で入力されている。EDATE関数を用いて求めた3か月後の日付を和暦にしなさい。

f:id:waenavi:20200406132945j:plain

 

解説

表示形式で和暦にします(参考:【Excel】表示形式はセルの書式設定なのでセルの値は変わらない(表示形式の基本))。

f:id:waenavi:20200406133109j:plain

 

表示形式はセルの書式であり、それぞれのセルの設定によって決まるため、関数の使用と各セルの表示形式は無関係です。したがって、参照元が西暦で、EDATEの答えを和暦にしても何ら問題はありません。

f:id:waenavi:20200406133154j:plain

 

(3)1か月前の日付、数か月前の日付

問題

セルA1に入力した日付の1か月前の日付を求めなさい。また、3か月前の日付を求めなさい。

f:id:waenavi:20200406133504j:plain

 

解説

月単位で過去の日付を求める場合は、第2引数をマイナスにします。1か月前の日付は-1にします。

  • =EDATE(A1,-1)

f:id:waenavi:20200406133638j:plain

 

また、3か月前の日付は-3です。月を減算したことによって昨年以前の日付になることもあります。

  • =EDATE(A1,-3)

f:id:waenavi:20200406133722j:plain

 

(4)0か月後の日付

問題

B列に-5から5までの整数を入力した。セルA1に入力した日付の5か月前から5か月後までの日付を求めなさい。

f:id:waenavi:20200406135101j:plain

 

解説

基準となる日付を絶対参照とし、月数を参照することによって1か月おきの日付を求めることができます。

  • =EDATE($A$1,B3)

f:id:waenavi:20200406135236j:plain

 

EDATE関数の第2引数を0にすると、0か月後なので元の日付と同じ答えになります。

f:id:waenavi:20200406135334j:plain

 

2.年単位の場合

(1)年は月の12倍

問題

セルA1に入力した日付の1年後、半年後、3年前の日付を求めなさい。また、セルB1に入力した年数を加算した日付を求めなさい。

f:id:waenavi:20200406140002j:plain

 

解説

年単位で日付を求める場合もEDATE関数を使います。ただし、12倍するのを忘れてはいけません。1年後の場合、第2引数を12にします。

  • =EDATE(A1,12)

f:id:waenavi:20200406140036j:plain

 

半年は、6か月のことなので6です。

  • =EDATE(A1,6)

f:id:waenavi:20200406140116j:plain

 

また、3年前の場合は-36です。

  • =EDATE(A1,-36)

f:id:waenavi:20200406140149j:plain

 

セルに年数を入力した場合は12倍します。

  • =EDATE(A1,B1*12)

f:id:waenavi:20200406140205j:plain

 

(2)満60歳の誕生日

問題

セルA1に生年月日を入力した場合、満60歳の誕生日を求めなさい。

f:id:waenavi:20200406140334j:plain

 

解説

還暦を満年齢で計算する方法と、数え年で計算する方法がありますが、最近は60歳の誕生日を迎えた時点で還暦のお祝いをすることが増えてきました。誕生日を計算するのはEDATE関数です。

  • =EDATE(A1,60*12)

f:id:waenavi:20200406140416j:plain

 

3.日単位・週単位の場合はEDATEではない

(1)1日単位の加減算は足し算・引き算で良い

問題

セルA1に入力した日付の3日後の日付と2週間前の日付を求めるのに、EDATE関数を用いるのは適切と言えるか。

f:id:waenavi:20200406174124j:plain

 

解説

Excelでは、1日=24時間を「1」として表します。したがって、Excelに「1」と入力すると、日付の計算では1日=24時間と解釈します。

f:id:waenavi:20200406174448j:plain

 

したがって、3日後の日付を求めるには、単に3を加算すればよいです(参考:【Excel】完全マスター!日付の足し算と引き算を使った日数の計算問題)。

f:id:waenavi:20200406174835j:plain

 

また、2週間前の日付を求めるには14を引けばよいです。1日単位または1週間単位の日付の加減算をするのに、Excel関数を使うのは間違いです。

f:id:waenavi:20200406174949j:plain

 

(2)EDATE関数を使う理由

問題

月単位、年単位の加減算をするのにEDATE関数を用いるのはなぜか。 

解説

4月10日と5月10日の間の日数は30日間ですが、5月10日と6月10日の間の日数は31日間です。

f:id:waenavi:20200406180020j:plain

 

このように同じ1か月でも日数が異なるので、「1か月を加算する」という場合、30日を加算するのか31日を加算するのかが分かりません。1か月の日数に関係なく月を加算するにはEDATE関数を使います。

f:id:waenavi:20200406185355j:plain

 

また、1年を加算する代わりに365を加算しても良いですが、うるう年の場合は366日となります。1年の日数に関係なく年を加算するにはEDATE関数を使います。

f:id:waenavi:20200406180705j:plain

 

4.日付文字列の場合

(1)シリアル値に変換する必要は無い

問題

2020年2月2日の2か月後を求めるため、「=EDATE("2020/2/2",2)」と入力した。この数式は正しいと言えるか。

f:id:waenavi:20200406180900j:plain

 

解説

「=EDATE("2020/2/2",2)」と入力して、表示形式を日付にすると、2020/4/2となり正しい数式であることが分かります。

f:id:waenavi:20200406180934j:plain

 

EDATE関数の第1引数である日付は原則として、日付のシリアル値を指定する必要があり、文字列を入力した場合はエラーになることがあります。本来なら、日付を表す文字列はシリアル値にするため、1をかけるか0を足すなどして数値化する必要があります(参考:【Excel】TEXT関数で数値を日付や時刻のシリアル値に変換する、日付の変換方法まとめ)。

  • =EDATE("2020/2/2"*1,2)

しかし、EDATEをはじめとする日付の関数は、日付に変換できる日付文字列を引数とした場合は自動的に数値化する仕様なので、このような演算が不要です。したがって、「=EDATE("2020/2/2",2)」と入力すればよいです。

f:id:waenavi:20200406181237j:plain

 

このほか、Excelが日付文字列として解釈できる次のような記述もOKです。

  • =EDATE("H30-1-1",2)
  • =EDATE("平成30年1月1日",2) ※「西暦」は不可

 

(2)ダブルクォートは必要

問題

2020年2月2日の2か月後を求めるため、「=EDATE(2020/2/2,2)」と入力したところ、1901年7月19日となった。この理由を述べなさい。

f:id:waenavi:20200406181415j:plain

 

解説

「=EDATE(2020/2/2,2)」と入力すると、1901/7/19となり数式が誤っていることが分かります。ダブルクォーテーションをつけずに、引数としてスラッシュを用いると割り算となります。「2020/2/2」は2020÷2÷2=505となります。

f:id:waenavi:20200406182822j:plain

 

シリアル値505=1901年5月19日なので、2か月後は7月19日です。

f:id:waenavi:20200406183218j:plain

 

(3)8桁の数値

問題

セルA1に「20200202」と入力されている。2020年2月2日の2か月後を求めるため、「=EDATE(A1,2)」と入力したところエラーになった。数式を修正しなさい。

f:id:waenavi:20200406183338j:plain

 

解説

8桁で日付を表した数値はシリアル値ではありません。8桁の数値を日付のシリアル値に変換するにはTEXT関数を使います(参考:【Excel】TEXT関数で数値を日付や時刻のシリアル値に変換する、日付の変換方法まとめ)。

  • =TEXT(A1,"#-00-00")

f:id:waenavi:20200406185146j:plain

 

TEXT関数の戻り値は文字列なので、本来なら数値化する必要がありますが、前述のとおり、EDATE関数の引数として用いる場合は数値化する必要はありません。

  • =EDATE(TEXT(A1,"#-00-00"),2)

f:id:waenavi:20200406185220j:plain

 

5.シリアル値の範囲を超えたらエラー

問題

「=EDATE("10000/1/1",1)」「=EDATE("2000/1/1",100000)」と入力したところ、いずれもエラーになった。その理由を述べなさい。

f:id:waenavi:20200406185537j:plain

 

解説

Excelが日付として認識できる範囲は1900年から9999年までです。EDATE関数の引数にこの範囲を超える日付を入力するとエラーになります。

また、日付が正常な範囲内であったとしても、計算した結果がシリアル値の範囲を超える場合もエラーとなります。

 

6.該当する日付が無い場合

(1)同じ月の月末になる

問題

EDATE関数を用いて「2021年5月31日」の6か月後、3か月前の日付を求めなさい。

f:id:waenavi:20200406190633j:plain

 

解説

6か月後の日付を求めます。2021/11/31ではなく、2021/11/30になります。

f:id:waenavi:20200406190748j:plain

 

3か月前の日付を求めます。2021/2/31ではなく、2021/2/28になります。

f:id:waenavi:20200406190901j:plain

 

2月30日、2月31日、4月31日、6月31日、9月31日、11月31日は存在しない日付です。また、うるう年以外の2月29日も存在しません。EDATE関数で存在しない日付となった場合は、同じ月の月末の日付になります。

f:id:waenavi:20200406191630j:plain

 

うるう年の2月の場合は2月29日になります。

f:id:waenavi:20200406191039j:plain

 

(2)答えが同じになることがある

問題

2021年5月26日~6月1日の3か月前の日付をそれぞれ求めなさい。

f:id:waenavi:20200406191924j:plain

 

解説

3か月前の日付を求めます。5月28日~31日についてはすべて2月28日になります。

f:id:waenavi:20200406191954j:plain

 

(3)入れ子にすると結果が異なることがある

問題

セルA1に入力した日付の、1年後の日付を求めるのに、「=EDATE(EDATE(A1,6),6)」としてもよいか。

f:id:waenavi:20200406192418j:plain

 

解説

1年後の日付を求めるのであれば、月数を12とすればよいです。

  • =EDATE(A1,12)

f:id:waenavi:20200406192349j:plain

 

12か月を6か月+6か月として、EDATE関数を2回使うと5月30日になってしまいます。それは、6か月後の11月31日が存在せず、11月30日として計算するからです。

f:id:waenavi:20200406195044j:plain

 

7.小数の場合

(1)月の小数部分は切り捨て

問題

EDATE関数の第2引数に「2.5」「-2.5」と指定すると、それぞれどのような日付になるか。 

f:id:waenavi:20200406195210j:plain

 

解説

EDATE関数の第2引数を「2.5」にすると、2か月後の日付になります。このように、第2引数を小数にすると、小数点以下は切り捨てとなり、小数点以下を入力していないのと同じになります。

f:id:waenavi:20200406195310j:plain

 

また、「-2.5」にすると、2か月前の日付になります。マイナスの場合も小数点以下は切り捨てとなります。つまり、ROUNDDOWNと同じです(参考:【Excel関数】ROUNDUPとROUNDDOWN、切り上げ、切り捨て、四捨五入の練習問題)。

f:id:waenavi:20200406195502j:plain

 

(2)半月とは何ぞ

問題

セルA1に入力した日付の2か月後の日付を求めるのに、EDATE関数を用いるのは適切と言えるか。

解説

2か月半後の日付を求めようとして、「=EDATE(A1,2.5)」と入力したとしても、小数点以下切り捨てで2か月後の日付となります。

f:id:waenavi:20200406195538j:plain

 

1か月の日数が月によって異なるため、1か月の半分(半月)が何日を指すのか分かりません。EDATE関数を用いたとしても、半月後の日付を求めることは不可能です。半月とは何かを定義したうえで、日数を足し算で加算するべきです。例えば半月=15日とするのであれば「=EDATE(A1,2)+15」です。

f:id:waenavi:20200406195712j:plain

 

(3)補足:2か月後と3か月後の真ん中

例えば、2か月後と3か月後の日付のちょうど真ん中の日付を求めるのであれば、平均をすればよいです。ただし、平均すると「0.5日」が発生することがありますので、切り捨ての場合はINT、切り上げの場合はROUNDUPをします(参考:【Excel関数】ROUNDUPとROUNDDOWN、切り上げ、切り捨て、四捨五入の練習問題)。

  • =INT*1/2)
  • =ROUNDUP*2/2,0)

f:id:waenavi:20200406195925j:plain

 

(4)起算日が小数の場合も切り捨て

問題

セルA1に「2020/2/2 12:30」と入力した。EDATE関数を用いて3か月後の日付を求めなさい。

f:id:waenavi:20200406200035j:plain

 

解説

セルA1に「2020/2/2 12:30」と入力しています。シリアル値は「43863.52083」です。このうち、整数部分の「43863」が日付、小数部分の「.52083」が時刻を表します。

f:id:waenavi:20200406200104j:plain

f:id:waenavi:20200406200328j:plain

 

EDATE関数を用いてセルA1の3か月後を求めます。

f:id:waenavi:20200406200743j:plain

 

シリアル値が整数になります。

f:id:waenavi:20200406200802j:plain

 

時刻を表示すると「2020/5/2 00:00」となります。1か月後の日付にはなりますが、時刻は0時になってしまいます。EDATE関数の第1引数に小数のシリアル値を入れた場合も切り捨てで、整数として計算するため、時刻の部分が消えてしまいます。

f:id:waenavi:20200406200855j:plain

 

時刻の部分を表示するには、小数部分をMOD関数で求めて加算します。

  • =EDATE(A1,3)+MOD(A1,1)

f:id:waenavi:20200406201037j:plain

 


解説は以上です。


 

*1:EDATE(A1,2)+EDATE(A1,3

*2:EDATE(A1,2)+EDATE(A1,3


Copyright(C)2018-2020 waenavi, All rights reserved. [www.waenavi.com 定礎 平成三十年八月]
Youtube | 公式サイト | twitter | 著作権 | 運営者情報 | お問い合わせ