EOMONTH関数のEOMONTHとは、End of Month(エンド・オブ・マンス)の略であり、月の終わりの日付(月末)を求める関数です。月末の日付は28日~31日と月によって異なるため、関数を用いて月末日が求められるのは非常に便利です。
ところで、月末を求めるEOMONTH関数があるのに、月初を求める関数が無いのはなぜでしょうか?
それは、月末の翌日は翌月の1日であり、EOMONTH関数に1を加算するだけで翌月の月初の日付を求めることができるからです。EOMONTH関数は月末を求めるだけでなく、月初の日付を求める関数でもあるのです。それだけでなく2日も3日もN日もすべてEOMONTH関数で求めます。
そこで、今回はEOMONTH関数の基本と、月末、月初の日付を計算する方法、日にちを固定して日付を求める方法について出題します。
目次
- 1.EOMONTH関数の基本
- 2.日付文字列の場合
- 3.月初の日付を求める
- 4.日にちを固定する
- 5.DATE関数との違い
- 6.最終日の判定
- 7.小数の場合は切り捨てになる
- 8.EOMONTH応用事例
1.EOMONTH関数の基本
(1)来月の月末、先月の月末
問題
セルA1に入力した日付の来月の月末の日付を求めなさい。また、先月の月末の日付を求めなさい。
解説
セルA1に入力されている日付はシリアル値です(参考:【Excel】日付の「シリアル値」を本気で理解するには何を練習するべきか?)。EOMONTH関数は基準となる日付と加算する月数を指定します。月は数値で指定します。
- =EOMONTH(開始日,月)
来月=1か月後の場合は第2引数を1にします。
- =EOMONTH(A1,1)
関数の戻り値は日付のシリアル値です。したがって、表示形式を変えることによって、求める日付になります(以下、同じ)。
また、先月=1か月前の場合は第2引数を-1にします。マイナスにすることによって過去の月にさかのぼることができます。
- =EOMONTH(A1,-1)
(2)表示形式
問題
セルA1は西暦で入力されている。EOMONTH関数を用いて求めた月末の日付を和暦にしなさい。
解説
表示形式で和暦にします(参考:【Excel】表示形式はセルの書式設定なのでセルの値は変わらない(表示形式の基本))。
表示形式はセルの書式であり、それぞれのセルの設定によって決まるため、関数の使用と各セルの表示形式は無関係です。したがって、参照元が西暦で、EOMONTHの答えを和暦にしても何ら問題はありません。
(3)当月の月末
問題
-5から5までの整数を入力した。5か月前から5か月後までの月末を求めなさい。
解説
基準となる日付を絶対参照とし、月数を参照することによって1か月おきの日付を求めることができます。
- =EOMONTH($B$1,A4)
EOMONTH関数の第2引数を0にすると、同じ月の月末を求めることができます。
(4)年単位の場合は12倍
問題
セルA1に入力した日付の2年後の月末の日付を求めなさい。
解説
年単位で日付を求める場合もEOMONTH関数を使います。ただし、12倍するのを忘れてはいけません。2年後の場合、第2引数を24にします。
- =EOMONTH(A1,24)
2.日付文字列の場合
(1)シリアル値に変換する必要は無い
問題
2020年2月の月末の日付を求めるため、「=EOMONTH("2020/2/1",0)」と入力した。この数式は正しいと言えるか。
解説
「=EOMONTH("2020/2/1",0)」と入力すると、2020/2/29となり正しい数式であることが分かります。
EOMONTH関数の第1引数である日付は原則として、日付のシリアル値を指定する必要があり、文字列を入力した場合はエラーになることがあります。本来なら、日付を表す文字列はシリアル値にするため、1をかけるか0を足すなどして数値化する必要があります(参考:【Excel】日付を表す文字列に「1」を掛けるだけでシリアル値に変換できる)。
- =EOMONTH("2020/2/1"*1,0)
しかし、EOMONTHをはじめとする日付の関数は、日付に変換できる日付文字列を引数とした場合は自動的に数値化する仕様なので、このような演算が不要です。したがって、「=EOMONTH("2020/2/1",0)」と入力すればよいです。
(2)ダブルクォートは必要
問題
2020年2月の月末の日付を求めるため、「=EOMONTH(2020/2,0)」と入力したところ、1902年10月31日(シリアル値1035)となった。この理由を述べなさい。
解説
「=EOMONTH(2020/2,0)」と入力すると、1902/10/31となり数式が誤っていることが分かります。
ダブルクォーテーションをつけずに、関数の中でスラッシュを用いると割り算となります。「2020/2」は2020÷2=1010となります。1902年10月の月末という解釈になってしまいます。EOMONTHの日付には必ず、ダブルクォーテーションをつけ年月日を省略せずに入力します。
(3)6桁の数値
問題
セルA1に「202002」と入力されている。2020年2月の月末を求めるため、「=EOMONTH(A1,0)」と入力したところ2453年1月31日になった。このようになる理由を述べたうえで、数式を修正しなさい。
解説
6桁で日付を表した数値はシリアル値ではありません。6桁の数値を4桁と2桁に分割するにはTEXT関数を使います(参考:【Excel】TEXT関数で数値を日付や時刻のシリアル値に変換する、日付の変換方法まとめ)。さらに、年-月-日の形式にするため「-01」を連結します。
- =TEXT(A1,"#-00")&"-01"
TEXT関数の戻り値は文字列なので、本来なら数値化する必要がありますが、前述のとおり、EOMONTH関数の引数として用いる場合は数値化する必要はありません。
- =EOMONTH(TEXT(A1,"#-00")&"-01",0)
別解
6桁の数値を4桁と2桁に分けて、DATE関数で求める方法もあります。
- =DATE(LEFT(A1,4),RIGHT(A1,2)+1,0)
3.月初の日付を求める
(1)当月月初、先月月初、来月月初
問題
セルA1に入力した日付と同じ月の月初(1日)の日付を求めなさい。また、先月または来月の月初の日付を求めなさい。
解説
毎月の月末の翌日は必ず、次の月の1日になります。つまり、月初の日付は「月末+1」です。当月月初は、先月末+1です。
- =EOMONTH(A1,-1)+1
同様に、先月の月初=先々月月末+1、来月の月初=今月末+1となります。
- =EOMONTH(A1,-2)+1
- =EOMONTH(A1,0)+1
(2)Nか月後の月初と月末
問題
セルA1に入力した日付の10か月後の月の、月初と月末の日付を求めなさい。
解説
10か月後の月末は「EOMONTH(A1,10)」です。
10か月後の月初は、9か月後の月末+1です。
- =EOMONTH(A1,9)+1
いっぱんに、Nか月後の月初は「EOMONTH(開始日,N-1)+1」、月末は「EOMONTH(開始日,N)」です。また、Nか月前の月初は「EOMONTH(開始日,-N-1)+1」、月末は「EOMONTH(開始日,-N)」です。
(3)TODAY関数との併用
問題
TODAY関数を用いて、来月の月初と月末の日付を求めなさい。
解説
今月末が「=EOMONTH(TODAY(),0)」なので、来月の月初はその翌日となります。
- =EOMONTH(TODAY(),0)+1
来月末は「=EOMONTH(TODAY(),1)」です。
4.日にちを固定する
問題
セルA1に入力した日付と同じ月の10日を表示しなさい。
解説
月初が求められるということは、2日、3日・・・も求められるということです。先月末の日付「EOMONTH(開始日,-1)」に、日にちを加算します。
今月の10日は先月末の10日後です。
- =EOMONTH(A1,-1)+10
いっぱんに、今月のN日は、先月末+N(=EOMONTH(開始日,-1)+N)で求められます。
5.DATE関数との違い
問題
年・月を分けて入力した。月初または月末の日付を求める場合、EOMONTH関数を用いるべきか。
解説
EOMONTH関数は日付のシリアル値もしくは日付文字列が既に入力されている状態で、月末の日付(シリアル値)に変換する関数であり、年月が分かれている場合は使用すべきではありません。
年と月を集約して1つのシリアル値にするのはDATE関数です。
日にちを1にすることで月初の日付を求めることができます。
- =DATE(年,月,1)
また、日にちを0にすることで月末の日付を求めることが可能です。
- =DATE(年,月+1,0)
6.最終日の判定
(1)月末までの残り日数
問題
セルA1に入力した日付について、月末までの残り日数を求めなさい。
解説
残り日数には最後日を含む場合と含まない場合の2通りがあります(参考:【Excel】日付の足し算と引き算、残り日数を計算する方法(あと何日))。月末までの残り日数の場合、月末を含むのか含まないのかによって1日異なります。
例えば、月末にイベントが始まる場合の準備期間としての残り日数には月末を含みません(月末は準備期間ではない)。
この場合は単純に引き算をするだけで良いです。つまり「EOMONTH-当日」です。
- =EOMONTH(A1,0)-A1
しかし、イベントの最中で月末にイベントが終わる場合の残り日数には、月末もイベント最終日として当然含まれるため、1を足す必要があります。
「EOMONTH+1」は翌月初日のことなので、翌月初日から当日を引いているのと同じです。
- =EOMONTH(A1,0)-A1+1
*補足*当日(3/10)を含まない場合は1を引きます。
(2)各曜日の最終日
問題
セルA1に入力した日付が、最終日曜日~土曜日のいずれかであればTRUE、そうでなければFALSEと表示しなさい。
解説
最終の日曜日~土曜日であるということは、月末までの残り日数が7日以内であるということです。7日を加算すると翌月になり、月末の日付を超えます。
つまり、7日を加算した時に月末の日付(シリアル値)より大きくなれば、各曜日の最終であることが分かります。
- =A1+7>EOMONTH(A1,0)
7.小数の場合は切り捨てになる
(1)月の小数部分は切り捨て
問題
EOMONTH関数の第2引数に「2.5」「-2.5」と指定すると、それぞれどのような日付になるか。
解説
EOMONTH関数の第2引数を「2.5」にすると、2か月後の月末になります。このように、第2引数を小数にすると、小数点以下は切り捨てとなり、小数点以下を入力していないのと同じになります。
また、「-2.5」にすると、2か月前の月末になります。マイナスの場合も小数点以下は無視されます。つまり、ROUNDDOWNをしたのと同じです(参考:【Excel関数】ROUNDUPとROUNDDOWN、切り上げ、切り捨て、四捨五入の練習問題)。
(2)起算日が小数の場合も切り捨て
問題
セルA1に「2020/2/2 12:30」と入力した。EOMONTH関数を用いて3か月後の日付を求めなさい。
解説
EOMONTH関数を用いてセルA1の3か月後を求めます。シリアル値が整数になります。
「2020/5/2 00:00」となります。EOMONTH関数の第1引数に小数のシリアル値を入れた場合も切り捨てで、整数として計算するため、時刻の部分が消えます。
8.EOMONTH応用事例
- 【Excel関数】第1、第2、最終などの特定の曜日の日付を求める計算方法まとめ
- 【Excel関数】先週、今週、翌週の曜日の日付、週番号、今週の日付の判定
- 【Excel関数】カレンダー、週間スケジュールの日付を自動で表示する方法
解説は以上です。