[EXCEL] 指定日の「〇か月前/後の同日/初日/月末」「年末」「年度末」を出すEMONTH関数、EDATE関数、DATE関数
【まとめ】
EDATE関数(イーデイト):
基準日から月数を前後させた「同日」を出す
=EDATE(基準日,月数)
EOMONTH関数(イーオーマンス):
基準日から月数を前後させた月の「末日」を出す
=EOMONTH(基準日,月数)
*2つの関数を知らなくても、DATE関数で代用可能。
=DATE(year(基準日),month(基準日)+月数,day(基準日)) 等
【説明】
「ある日(基準日)」の〇か月前/後の「同日」や、月の「初日」「末日」などを出したい場合があります。
進捗管理、更新日(車検等)、許認可切れ(間近)の事業者抽出・・・。
そんな時に使える関数の紹介です。
実際、どんなふうに使えるか色々示してみました。
1 使う関数
EOMONTH関数(イーオーマンス/End of Month/月の終わりの略)
機能:指定した日付から、指定した月数だけ前後させた月の「月末日」を表示する(返す)
記述:=EOMONTH(基準日,月数)
・基準日:( 推奨)日付セルを指定、(非推奨)日付形式で直接記述
・月数:基準日から何か月後(前)の末日を求めるか、その月数(正の値なら未来、負の値なら過去)
EDATE関数(イーデイト/Elapsed Date/経過した日の略(正式名称は不明)
機能:指定した日付から前後の「月数」だけ前後させた同日を表示する(=返す)
記述:=EDATE(指定日,月数)
・基準日:(推奨)日付セルを指定 (非推奨)日付形式で直接入力
・月数:前後させる月数(正の数なら未来、負の数なら過去)
*個人的感想
どちらも「月」単位で「前後させる(ずらす)」ものなのに、MONTHとDATEの2つがあるのは、ちょっとわかりづらい。
EDATEはEMONHTでもいい気がしますが、EOMONTHと一字違いだと間違えやすいので、敢えてEDATEにしたのかもしれません。
まぁ、月末はMONTH、同日はDATEと覚えれば済みますけど。
・DATE関数でも代用可能
上の2つの関数を知らなくても、DATE関数と年・月・日を抜き出す3つの関数が使えれば代用可能です。
=DATE(年,月,日) ⇒ 年月日を作る
=YEAR(日付セル) ⇒ 年を取り出す
=MONTH(日付セル) ⇒ 月を取り出す)
=DAY(日付セル) ⇒ 日を取り出す)
2 色々な使い方
*「月の初日」は常に「1日」ですが、「月末日」は月により異なります。
従って直接「月末日」を出せない場合は、「月の初日」の「前の日」とすることで、「月末日」を出すことができます。
*EOMONTH/EDATE関数を使った場合と、DATE関数を使った場合を併記します。結果はどちらも同じです。
① 前々月の初日(基準日:R7.12.23) 式 (考え方)⇒ 結果
=EOMONTH(基準日,-3)+1 (3か月前の月の末日の翌日)⇒ R7.10.1
=DATE(YEAR(基準日),MONTH(基準日)-2,1) (2か月前の月の初日)⇒R7.10.1
② 前々月の末日(基準日:R7.12.23)
=EOMONTH(基準日,-2) (2か月前の月の末日)⇒ R7.10.31
=DATE(YEAR(基準日),MONTH(基準日)-1,1)-1(1か月前の月の初日の前日
)⇒R7.10.31
③ 前々月の同日(基準日:R7.12.23)
=EDATE(基準日,-2) (2か月前の同日 )⇒ R7.10.2
=DATE(YEAR(基準日),MONTH(基準日)-2,DAY(基準日)) (同上)⇒ R7.10.23
=EDATE(基準日,-2) (同上)⇒ R7.10.23
④ 当月初日(基準日:R7.12.23)
=EOMONTH(基準日,-1)+1 (前月の末日の翌日)⇒ R7.12.1
=DATE(YEAR(基準日),MONTH(基準日),1) (当月の初日)⇒ R7.12.1
⑤ 当月末(基準日:R7.12.23)
=EOMONTH(基準日,0) (当月の末日)⇒ R7.12.31
=DATE(YEAR(基準日),MONTH(基準日)+1,1)-1 (翌月の初日の前日)⇒ R7.12.31
⑥ 翌月の初日(基準日:R7.12.23)
=EOMONTH(基準日,0)+1 (当月の末日の翌日)⇒ R8.1.1
=DATE(YEAR(基準日),MONTH(基準日)+1,1) (1か月後の月(=翌月)の初日)⇒ R8.1.1
⑦ 翌月の同日(基準日:R7.12.23)
=EDATE(基準日,1) (1か月後の月(=翌月)の同日)⇒ R8.1.23
=DATE(YEAR(基準日),MONTH(基準日)+1,DAY(基準日)) (同上)⇒ R8.1.23
⑧ 翌月の前日(基準日:R7.12.23)
=EDATE(基準日,1)-1 (1か月後の同日の前日)⇒ R8.1.22
=DATE(YEAR(基準日2),MONTH(基準日)+1,DAY(基準日))-1 (1か月後の月(=翌月)の同日の前日)⇒ R9.1.22
⑨ 翌月の末日(基準日:R7.12.23)
=EOMONTH(基準日,1) (当月の1か月後の月の末日)⇒ R8.1.31
=DATE(YEAR(基準日),MONTH(基準日)+2,1)-1 (当月の2か月後の月(=翌月)の初日の前日)⇒ R8.1.31
⑩ 1年後の前月末(基準日:R7.12.23)
=EOMONTH(C9,12) (12か月後の月の末日)⇒ R8.12.31
=DATE(YEAR(基準日)+1,MONTH(基準日)+1,1)-1 (1年1か月後の月の初日の前日)⇒ R8.12.31
⑪ 1年後の前日(基準日:R7.12.23)
=EDATE(C1,12)-1 (当月の12か月の同日の前日 ⇒ R8.12.22
=DATE(YEAR(基準日)+1,MONTH(基準日),DAY(基準日))-1 (同上)⇒ R8.12.22
⑬ 年末(基準日:R7.12.23)
=DATE(YEAR(基準日),12,31) (当年の12月31日)⇒ R7.12.31
⑭ 年度末(基準日:R7.12.23)
=DATE(YEAR(EDATE(基準日,-3))+1,3,31) (当日の3か月前の翌年の3月31日(3月なら12月の翌年の3月31日、4月なら1月の翌年の3月31日))⇒R8.3.31
=IF(MONTH(基準日)>=4,DATE(YEAR(基準日)+1,3,31),DATE(YEAR(基準日),3,31)) (4月以降なら翌年の3月31日、3月までなら当年の3月31日)⇒R8.3.31
ざっとこんなところでしょうか?
一覧にしてみると・・・

細かくて読めませんね・・・。
実際のエクセルファイルは別途掲載する予定ですが、有料マガジンを想定していまので、まずは自身でやってみてください。
「〇か月前/後」の月数をセルに入れると、変更が簡単になる
上の例では「〇か月前/後」の「〇(月数)」を数式の中に入れました。
でも、本来、変数を数式内に入れるのはご法度です。
固定的な業務であればこれで構いませんが、前後させる月数を変動させたい場合は、月数を別セルに入れ、数式にはそのセルを入れます。
これにより、数式を直すことなく、前後させる月数の変更が簡易になります。

絶対参照で($C$4)にしてあります
これも、実際のファイルがあった方が判りやすいでしょう。
応用編(別記事)
上述の数式と他の数式や「条件付き書式」との組み合わせにより、「基準日」の「〇か月」前になったら、メッセージを出したり、セルの色を変えるなどの設定にしておくことで、「期限切れ」を防ぐことができます。
昨今、公用車の車検切れ問題が散見していますが、そのようなものの対策にもなるでしょう。
これについては、別記事にします。
ファイルをご覧になりたい方はこちらからどうぞ(有料)。
まずは、上記に沿って自身で操作してみることをお勧めします。
ファイルを見るだけだと、身に付きませんから。
[EXCEL] EOMONTH・EDATE関数 実践ファイル
