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

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

【Excel】EOMONTH関数を用いた練習問題、月末なのにEOMONTHを使わないパターン

EOMONTH関数は月末を求める関数ですが、月末を計算するだけの関数ではありません(参考:【Excel】EOMONTH関数は月末を求める関数ですが、月初も計算できます)。EOMONTHだからといって月末を求める練習だけをしていると、EOMONTHをうまく活用できません。

そこで、年月の一致を判定する方法などEOMONTH関数の応用事例を出題します。また、月末なのにEOMONTHを使ってはいけないパターンもご紹介します。

目次

1.文字列連結

問題

セルA1に入力した日付を基準として、翌月10日の日付を、和暦で「令和~年~月~日払い」の形式で求めなさい。

f:id:waenavi:20200620063206j:plain

 

解説

月末締めで計算をした金額(給与や仕入代金など)を、翌月の10日までに一括で支払うことを「月末締め翌月10日払い」といいます(参考:【Excel】EOMONTH関数を用いた締め日の計算、翌月の支払日の計算)。

f:id:waenavi:20200620063253j:plain

 

翌月の10日はEOMONTH関数で求めることができます。この関数はシリアル値を返すので、そのまま文字を連結するとシリアル値のまま連結することになります。

  • =EOMONTH(A1,0)+10 &"払い"

f:id:waenavi:20200620063410j:plain

 

また、表示形式は数値(シリアル値)しか変えられないので、文字列を連結したものは変えることができません。

f:id:waenavi:20200620063455j:plain

 

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

  • =TEXT(EOMONTH(A1,0)+10,"ggge年m月d日")&"払い"

f:id:waenavi:20200620063744j:plain

 

別解

文字列を連結せず、シリアル値のまま、ユーザー定義表示形式で「ggge年m月d日払い」にしてもよいです。

f:id:waenavi:20200620063855j:plain

 

2.月末の日付を連続で入力する

問題

セルA1に月初の日付を入力した、セルA2以降にその翌月以降の月初の日付を求めなさい。また、セルB1に月末の日付を入力した。セルB2以降に翌月以降の月末の日付を求めなさい。

f:id:waenavi:20200620063956j:plain

 

解説

翌月の同じ日を求めるにはEDATE関数を求めます(参考:【Excel日付】月単位や年単位の加算、EDATE関数の使い方基本編)。

  • =EDATE(A1,1)

f:id:waenavi:20200620065359j:plain

 

翌月の月末を求めるにはEOMONTH関数を使います。

  • =EOMONTH(B1,1)

f:id:waenavi:20200620065425j:plain

 

別解

B列の日付は、A列の日付の3か月後の月末なので、EOMONTH関数で求めることも可能です。

  • =EOMONTH(A2,3)

f:id:waenavi:20200620065455j:plain

 

3.年月一致判定

問題

セルB4に入力した日付が今月の日付であればTRUE、そうでなければFALSEと表示しなさい。また、来月の日付であればTRUE、そうでなければFALSEと表示しなさい。

f:id:waenavi:20200620065642j:plain

 

解説

今月の日付であれば、今日の日付TODAYと比較して年月が一致するはずなので、年と月をそれぞれイコールであることを判定すればよいのですが、式が長くなります。日付がシリアル値で入力されているのに、わざわざYEARとMONTHに分ける必要はありません。

  • =AND(YEAR(B4)=YEAR(TODAY()),MONTH(B4)=MONTH(TODAY()))

それぞれの日付を月末日に変換し、月末日が一致すれば同じ年月であると言えます。年月が一致するかを判定するには、月末日に統一して判定するのがシンプルです。

  • =EOMONTH(B4,0)=EOMONTH(TODAY(),0)

f:id:waenavi:20200620065745j:plain

 

また、来月の場合も同様で、来月末と一致すれば来月の日付であることが分かります。

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

f:id:waenavi:20200620065820j:plain

 

4.空白の場合の処理

問題

セルA1に入力されている日付の3か月後の月末を求めなさい。ただし、セルA1が空白の場合は、空白とする。

f:id:waenavi:20200620065909j:plain

 

解説

まず、3か月後の月末の日付を求めます。

  • =EOMONTH(A1,3)

f:id:waenavi:20200620065939j:plain

 

セルA1を空白にすると「1900/4/30」となります。これは、1900/1/0の3か月後の月末にあたる日付です。

f:id:waenavi:20200620070044j:plain

 

しかし、元のセルが空白なら結果も空白にしたほうが良いです。

  • =IF(A1="","",EOMONTH(A1,3))

f:id:waenavi:20200620070114j:plain

 

5.EOMONTHのなかにIFを入れる

問題

セルA2が「ゴールド」であれば5年後の月末、それ以外は3年後の月末を表示しなさい。

f:id:waenavi:20200620070156j:plain

 

解説

セルA2が「ゴールド」であれば60か月後、そうでなければ36か月後と考えれば、「=IF(A2="ゴールド",~,~)」という形になります。

  • =IF(A2="ゴールド",EOMONTH(A1,60),EOMONTH(A1,36))

しかし、EOMONTH(A1,60)、EOMONTH(A1,36)は月数が異なるだけです。月数が異なるだけの場合は、EOMONTHを外にして、IF関数を第2引数に入れるほうがシンプルです。

  • =EOMONTH(A1,IF(A2="ゴールド",60,36))

f:id:waenavi:20200620070236j:plain

 

6.月が替わることの判定

問題

セルA1に任意の日付を入力した。1ずつ加算すると翌月の日付になる。月末の日付まで表示し、月が替わったら空白にしなさい。

f:id:waenavi:20200620070450j:plain

 

解説

1を加算するだけで連続する日付を入力することができます(参考:【Excel】完全マスター!日付の足し算と引き算を使った日数の計算問題)。

  • =A1+1

セルA1と比較して、月が不一致なら月が替わったと考えます。

  • =IF(MONTH($A$1)=MONTH(A1+1),A1+1,"")

f:id:waenavi:20200620070639j:plain

 

このとき、空白の次がエラーになるので、IFERROR関数を用いてエラーのときに空白になるようにします。

  • =IFERROR(IF(MONTH($A$1)=MONTH(A1+1),A1+1,""),"")

f:id:waenavi:20200620070802j:plain

 

別解

セルA1の日付から月末の日付を求めて、それを超えたら月が替わったと考えることもできます。

  • =IF(A1+1>EOMONTH(A1,0),"",A1+1)

f:id:waenavi:20200620071121j:plain

 

この場合も、空白の次がエラーになるので、 IFERROR関数を用いてエラーのときに空白になるようにします。

  • =IFERROR(IF(A1+1>EOMONTH(A1,0),"",A1+1),"")

f:id:waenavi:20200620071158j:plain

 

*補足*

関数で処理するのではなく、条件付き書式で「白色の文字」にして見えなくする方法もあります。この場合はIFERRORが不要となり、論理式だけで済みます。

  • =A2>EOMONTH($A$1,0)

f:id:waenavi:20200620071920j:plain

 

7.EOMONTHのように見えてEOMONTHではない例

(1)月末だけどDATE関数を使うパターン

問題

セルA1に西暦年4桁、セルA2に月を入力した。この年月の月初と月末の日付を求めなさい。

f:id:waenavi:20200620072040j:plain

 

解説

月初と月末の日付を求めるには、月末を求める関数であるEOMONTH関数を使いますが、EOMONTH関数は、日付がシリアル値になっている場合に限って使うことができます。この問題のように、年月を分けて入力している場合は、DATE関数を使います。

  • =DATE(A1,A2,1)

f:id:waenavi:20200620072120j:plain

 

月末は第3引数を0にすればよいです。

  • =DATE(A1,A2+1,0)

f:id:waenavi:20200620072147j:plain

 

(2)年月を抜き出すだけのパターン

問題

A列にランダムで日付を入力した。2020年6月の日付が何個あるか求めなさい。

f:id:waenavi:20200620072321j:plain

 

解説

前述のとおり、年月だけの一致判定をするにはEOMONTH関数を使いますが、日付から年月だけを取り出すにはTEXT関数を使ったほうが早いです(参考:【Excel】TEXT関数で数値を日付や時刻のシリアル値に変換する、日付の変換方法まとめ)。

  • =TEXT(A2,"yyyymm")*1

f:id:waenavi:20200620072429j:plain

 

個数を求めることもできます。

  • =COUNTIF(B:B,202006)

f:id:waenavi:20200620072456j:plain

 

別解

ピボットテーブルを使えば、年月ごとにグループ化して集計することができますので、関数不要です(参考:【Excel】ピボットテーブルで度数分布表(ヒストグラム)を作成する方法)。

f:id:waenavi:20200620072545j:plain

 


解説は以上です。


 


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