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

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

【Excel】EOMONTH関数は月末を求める関数ですが、月初も計算できます


EOMONTH関数のEOMONTHとは、End of Month(エンド・オブ・マンス)の略であり、月の終わりの日付(月末)を求める関数です。月末の日付は28日~31日と月によって異なるため、関数を用いて月末日が求められるのは非常に便利です。

ところで、月末を求めるEOMONTH関数があるのに、月初を求める関数が無いのはなぜでしょうか?

それは、月末の翌日は翌月の1日であり、EOMONTH関数に1を加算するだけで翌月の月初の日付を求めることができるからです。EOMONTH関数は月末を求めるだけでなく、月初の日付を求める関数でもあるのです。それだけでなく2日も3日もN日もすべてEOMONTH関数で求めます。

そこで、今回はEOMONTH関数の基本と、月末、月初の日付を計算する方法、日にちを固定して日付を求める方法について出題します。

目次

1.EOMONTH関数の基本

(1)来月の月末、先月の月末

問題

セルA1に入力した日付の来月の月末の日付を求めなさい。また、先月の月末の日付を求めなさい。

f:id:waenavi:20200509104724j:plain

 

解説

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

  • =EOMONTH(開始日,月)

来月=1か月後の場合は第2引数を1にします。

  • =EOMONTH(A1,1)

f:id:waenavi:20200509110150j:plain

 

関数の戻り値は日付のシリアル値です。したがって、表示形式を変えることによって、求める日付になります(以下、同じ)。

f:id:waenavi:20200509110215j:plain

 

また、先月=1か月前の場合は第2引数を-1にします。マイナスにすることによって過去の月にさかのぼることができます。

  • =EOMONTH(A1,-1)

f:id:waenavi:20200509115722j:plain

 

(2)表示形式

問題

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

f:id:waenavi:20200509115722j:plain

 

解説

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

f:id:waenavi:20200509120559j:plain

 

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

f:id:waenavi:20200509120647j:plain

 

(3)当月の月末

問題

-5から5までの整数を入力した。5か月前から5か月後までの月末を求めなさい。

f:id:waenavi:20200509120819j:plain

 

解説

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

  • =EOMONTH($B$1,A4)

f:id:waenavi:20200509121056j:plain

 

EOMONTH関数の第2引数を0にすると、同じ月の月末を求めることができます。

f:id:waenavi:20200509121146j:plain

 

(4)年単位の場合は12倍

問題

セルA1に入力した日付の2年後の月末の日付を求めなさい。

f:id:waenavi:20200509121257j:plain

 

解説

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

  • =EOMONTH(A1,24)

f:id:waenavi:20200509121657j:plain

 

2.日付文字列の場合

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

問題

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

解説

「=EOMONTH("2020/2/1",0)」と入力すると、2020/2/29となり正しい数式であることが分かります。

f:id:waenavi:20200509121752j:plain

 

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

  • =EOMONTH("2020/2/1"*1,0)

f:id:waenavi:20200509123448j:plain

 

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

f:id:waenavi:20200509123742j:plain

 

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

問題

2020年2月の月末の日付を求めるため、「=EOMONTH(2020/2,0)」と入力したところ、1902年10月31日(シリアル値1035)となった。この理由を述べなさい。

解説

「=EOMONTH(2020/2,0)」と入力すると、1902/10/31となり数式が誤っていることが分かります。

f:id:waenavi:20200509123850j:plain

 

ダブルクォーテーションをつけずに、関数の中でスラッシュを用いると割り算となります。「2020/2」は2020÷2=1010となります。1902年10月の月末という解釈になってしまいます。EOMONTHの日付には必ず、ダブルクォーテーションをつけ年月日を省略せずに入力します。

f:id:waenavi:20200509124112j:plain

 

(3)6桁の数値

問題

セルA1に「202002」と入力されている。2020年2月の月末を求めるため、「=EOMONTH(A1,0)」と入力したところ2453年1月31日になった。このようになる理由を述べたうえで、数式を修正しなさい。

f:id:waenavi:20200509124239j:plain

 

解説

6桁で日付を表した数値はシリアル値ではありません。6桁の数値を4桁と2桁に分割するにはTEXT関数を使います(参考:【Excel】TEXT関数で数値を日付や時刻のシリアル値に変換する、日付の変換方法まとめ)。さらに、年-月-日の形式にするため「-01」を連結します。

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

f:id:waenavi:20200509125308j:plain

 

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

  • =EOMONTH(TEXT(A1,"#-00")&"-01",0)

f:id:waenavi:20200509125335j:plain

 

別解

6桁の数値を4桁と2桁に分けて、DATE関数で求める方法もあります。

  • =DATE(LEFT(A1,4),RIGHT(A1,2)+1,0)

 

3.月初の日付を求める

(1)当月月初、先月月初、来月月初

問題

セルA1に入力した日付と同じ月の月初(1日)の日付を求めなさい。また、先月または来月の月初の日付を求めなさい。

f:id:waenavi:20200509125503j:plain

 

解説

毎月の月末の翌日は必ず、次の月の1日になります。つまり、月初の日付は「月末+1」です。当月月初は、先月末+1です。

  • =EOMONTH(A1,-1)+1

f:id:waenavi:20200509125603j:plain

 

同様に、先月の月初=先々月月末+1、来月の月初=今月末+1となります。

  • =EOMONTH(A1,-2)+1
  • =EOMONTH(A1,0)+1

f:id:waenavi:20200509125705j:plain

 

(2)Nか月後の月初と月末

問題

セルA1に入力した日付の10か月後の月の、月初と月末の日付を求めなさい。

f:id:waenavi:20200509130513j:plain

 

解説

10か月後の月末は「EOMONTH(A1,10)」です。

f:id:waenavi:20200509130730j:plain

 

10か月後の月初は、9か月後の月末+1です。

  • =EOMONTH(A1,9)+1

f:id:waenavi:20200509141240j:plain

 

いっぱんに、Nか月後の月初は「EOMONTH(開始日,N-1)+1」、月末は「EOMONTH(開始日,N)」です。また、Nか月前の月初は「EOMONTH(開始日,-N-1)+1」、月末は「EOMONTH(開始日,-N)」です。

f:id:waenavi:20200509141548j:plain

 

(3)TODAY関数との併用

問題

TODAY関数を用いて、来月の月初と月末の日付を求めなさい。

f:id:waenavi:20200509141838j:plain

 

解説

今月末が「=EOMONTH(TODAY(),0)」なので、来月の月初はその翌日となります。

  • =EOMONTH(TODAY(),0)+1

f:id:waenavi:20200509142309j:plain

 

来月末は「=EOMONTH(TODAY(),1)」です。

f:id:waenavi:20200509142459j:plain

 

4.日にちを固定する

問題

セルA1に入力した日付と同じ月の10日を表示しなさい。

f:id:waenavi:20200509142605j:plain

 

解説

月初が求められるということは、2日、3日・・・も求められるということです。先月末の日付「EOMONTH(開始日,-1)」に、日にちを加算します。

f:id:waenavi:20200509143417j:plain

 

今月の10日は先月末の10日後です。

  • =EOMONTH(A1,-1)+10

f:id:waenavi:20200509143531j:plain

 

いっぱんに、今月のN日は、先月末+N(=EOMONTH(開始日,-1)+N)で求められます。

f:id:waenavi:20200509143618j:plain

 

5.DATE関数との違い

問題

年・月を分けて入力した。月初または月末の日付を求める場合、EOMONTH関数を用いるべきか。

f:id:waenavi:20200509143827j:plain

 

解説

EOMONTH関数は日付のシリアル値もしくは日付文字列が既に入力されている状態で、月末の日付(シリアル値)に変換する関数であり、年月が分かれている場合は使用すべきではありません。

f:id:waenavi:20200509144632j:plain

 

年と月を集約して1つのシリアル値にするのはDATE関数です。

f:id:waenavi:20200509144836j:plain

 

日にちを1にすることで月初の日付を求めることができます。

  • =DATE(年,月,1)

f:id:waenavi:20200509144922j:plain

 

また、日にちを0にすることで月末の日付を求めることが可能です。

  • =DATE(年,月+1,0)

f:id:waenavi:20200509145046j:plain

 

6.最終日の判定

(1)月末までの残り日数

問題

セルA1に入力した日付について、月末までの残り日数を求めなさい。

f:id:waenavi:20200509145240j:plain

 

解説

残り日数には最後日を含む場合と含まない場合の2通りがあります(参考:【Excel】日付の足し算と引き算、残り日数を計算する方法(あと何日))。月末までの残り日数の場合、月末を含むのか含まないのかによって1日異なります。

f:id:waenavi:20200511062915j:plain

 

例えば、月末にイベントが始まる場合の準備期間としての残り日数には月末を含みません(月末は準備期間ではない)。

f:id:waenavi:20200511062957j:plain

 

この場合は単純に引き算をするだけで良いです。つまり「EOMONTH-当日」です。

  • =EOMONTH(A1,0)-A1

f:id:waenavi:20200509145351j:plain

 

しかし、イベントの最中で月末にイベントが終わる場合の残り日数には、月末もイベント最終日として当然含まれるため、1を足す必要があります。

f:id:waenavi:20200511063316j:plain

 

「EOMONTH+1」は翌月初日のことなので、翌月初日から当日を引いているのと同じです。

  • =EOMONTH(A1,0)-A1+1

f:id:waenavi:20200509145448j:plain

 

*補足*当日(3/10)を含まない場合は1を引きます。

 

(2)各曜日の最終日

問題

セルA1に入力した日付が、最終日曜日~土曜日のいずれかであればTRUE、そうでなければFALSEと表示しなさい。

f:id:waenavi:20200511064214j:plain

 

解説

最終の日曜日~土曜日であるということは、月末までの残り日数が7日以内であるということです。7日を加算すると翌月になり、月末の日付を超えます。

f:id:waenavi:20200511064804j:plain

 

つまり、7日を加算した時に月末の日付(シリアル値)より大きくなれば、各曜日の最終であることが分かります。

  • =A1+7>EOMONTH(A1,0)

f:id:waenavi:20200511064441j:plain

 

 

7.小数の場合は切り捨てになる

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

問題

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

f:id:waenavi:20200511065240j:plain

 

解説

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

f:id:waenavi:20200511065336j:plain

 

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

f:id:waenavi:20200511065501j:plain

 

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

問題

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

f:id:waenavi:20200511065751j:plain

 

解説

EOMONTH関数を用いてセルA1の3か月後を求めます。シリアル値が整数になります。

f:id:waenavi:20200511070521j:plain

 

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

f:id:waenavi:20200511070616j:plain

 

8.EOMONTH応用事例

 


解説は以上です。


 


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