【Excel】DATEDIFとEOMONTH関数で「当月=1ヶ月」の月数を求める数式

スポンサーリンク
スポンサーリンク

契約期間の月数を数えるとき「当月をもって1ヶ月とみなしたい」と思ったことはありませんか?

 

DATEDIF関数だけで計算すると、日数ベースの「満月数」が返ります。開始日と終了日が同じ月の場合は「0ヶ月」になるため、実務の感覚と合わないケースが出てくるでしょう。

 

この記事では、EOMONTH関数を組み合わせて「当月=1ヶ月」で月数を求める数式の考え方をステップごとに解説していきます。

 

コピーしてすぐ使える完成形の数式も掲載しているので、ぜひ活用してみてください。

スポンサーリンク

数式の完成形:DATEDIF×EOMONTHの月数集計

結論から示すと、「当月=1ヶ月」で月数を求める数式はこちらです。

📝
完成形の数式
=DATEDIF(EOMONTH(A2,-1)+1, EOMONTH(B2,0), “M”)+1
A2=開始日 B2=終了日

 

A2に開始日、B2に終了日が入っている前提で使います。実際の計算結果を表で確認してみましょう。

 

開始日(A2) 終了日(B2) 数式の結果 カウント対象月
4/10 4/25 1 4月のみ
4/15 7/20 4 4月〜7月
1/5 3/28 3 1月〜3月
11/20 翌2/14 4 11月〜翌2月

 

開始日・終了日が月の途中でも、その月を丸ごと1ヶ月としてカウントしているのが分かります。年をまたぐ期間でも問題ありません。

 

次のセクションでは、なぜこの数式で正しく集計できるのかを解説していきます。

スポンサーリンク

数式の解説:考え方とEOMONTH・DATEDIFの役割

この数式は、大きく3つのステップで動いています。まずは全体像を把握しておきましょう。

 

🔄
数式の3ステップ
📅
STEP 1
EOMONTH関数で
月初・月末に変換
🔢
STEP 2
DATEDIF関数で
満月数を計算
STEP 3
末尾の+1で
当月分を加算

 

それぞれのステップを順番に見ていきましょう。

なぜEOMONTH関数を使うのか?

DATEDIF関数は、開始日から終了日までの「満月数」を返す関数です。満月数とは、開始日と同じ日付が翌月にくるたびに1ヶ月と数える仕組みのこと。

 

たとえば、4/15〜7/20をそのまま渡すと次のようになります。

 

  • 4/15 → 5/15 で1ヶ月
  • 5/15 → 6/15 で2ヶ月
  • 6/15 → 7/15 で3ヶ月
  • 7/15 → 7/20 は5日だけ → 1ヶ月未満

 

結果は「3」。しかし、4月・5月・6月・7月を1ヶ月ずつ数えたい場合は「4」にしたいですよね。

 

そこで、開始日を「月初」、終了日を「月末」に揃えてからDATEDIFに渡す方法をとります。この変換を担当するのがEOMONTH関数というわけです。

EOMONTH関数で月初・月末を求める

数式のなかでEOMONTH関数を2回使っています。それぞれの役割を見てみましょう。

 

■ 月初の求め方:EOMONTH(A2,-1)+1

  • EOMONTH(A2,-1)は「A2の前月の末日」を返す
  • そこに+1すると「A2の月の1日」になる
  • 例:A2が4/15 → EOMONTH(4/15,-1) = 3/31 → +1 = 4/1

■ 月末の求め方:EOMONTH(B2,0)

  • EOMONTH(B2,0)は「B2の当月の末日」を返す
  • 例:B2が7/20 → EOMONTH(7/20,0) = 7/31

 

この変換により、開始日4/15は4/1に、終了日7/20は7/31になります。日付が「月単位のきれいな区間」に揃うイメージです。

 


EOMONTH関数による日付変換
変換前(元の日付)
開始日:4/15
終了日:7/20途中の日付なので
DATEDIF単体では月数がズレる

変換後(月初・月末)
月初:4/1(EOMONTH(A2,-1)+1)
月末:7/31(EOMONTH(B2,0))月単位のきれいな区間に揃う

💡

ポイント
EOMONTH(A2,-1)+1 は「前月末日の翌日=当月1日」を取得するテクニック。開始日が1日でも15日でも、必ず月初に変換されます。

DATEDIF関数で満月数を求め、+1する理由

変換後の月初・月末をDATEDIFに渡してみましょう。

 

=DATEDIF(4/1, 7/31, “M”) → 結果は「3」

 

DATEDIFは4/1→5/1で1、5/1→6/1で2、6/1→7/1で3とカウントします。7/1〜7/31は30日しかなく、次の「8/1」に届かないため1ヶ月にはなりません。

 

しかし実際は4月・5月・6月・7月の4ヶ月分を数えたいはず。月初から月末までの区間では、DATEDIFの結果が常に1ヶ月分少なくなります。

 

だからこそ、数式の末尾で+1して補正しているというわけです。

スポンサーリンク

具体例で計算の流れを追う

ここまでの解説を踏まえ、2つのパターンで数式の動きを確認してみましょう。

同月内のケース(4/10〜4/25)

処理ステップ 数式 結果
月初に変換 EOMONTH(4/10,-1)+1 4/1
月末に変換 EOMONTH(4/25,0) 4/30
満月数を計算 DATEDIF(4/1, 4/30, “M”) 0
+1で補正 0+1 1ヶ月

4月内で完結する期間でも、きちんと「1ヶ月」と返ります。DATEDIF単体なら「0」になるところを、EOMONTH+1の組み合わせで正しく補正できていることが分かるでしょう。

複数月にまたがるケース(4/15〜7/20)

処理ステップ 数式 結果
月初に変換 EOMONTH(4/15,-1)+1 4/1
月末に変換 EOMONTH(7/20,0) 7/31
満月数を計算 DATEDIF(4/1, 7/31, “M”) 3
+1で補正 3+1 4ヶ月

4月〜7月の「4ヶ月」が正しく求まりました。月の途中の日付が入っていても、月単位で正確にカウントされています。

 

 

なお、数式がうまく動かない場合は、セルの書式が「日付」になっているか確認してみてください。文字列として入力されているとDATEDIF関数がエラーを返すことがあります。エラーが出た場合は、こちらの記事も参考になるかもしれません。

 

Excel関数エラーの原因と直し方|#VALUE!・#REF!・#NAME?症状別逆引き

数式を入力したのに結果が反映されないときは、計算方法が「手動」になっている可能性があります。

Excel数式が表示されるだけで計算されない原因と直し方【症状別逆引き】

スポンサーリンク

Q&A【よくある疑問まとめ】

Q. DATEDIF関数が関数の挿入ダイアログに表示されません。使えないのでしょうか?
A. DATEDIF関数はExcelで使えますが、関数の挿入ダイアログや数式オートコンプリートには表示されません。これはLotus 1-2-3との互換性のために残されている関数で、Microsoftの公式ヘルプでも「互換関数」として扱われています。セルに直接 =DATEDIF(… と手入力すれば問題なく動作します。筆者自身も業務で日常的に使っていますが、計算結果が不正確になったことは一度もありません。ただし、入力補完が効かないため、引数の順番(開始日, 終了日, 単位)を間違えやすい点にはご注意ください。
Q. 開始日と終了日が同じ日付の場合、結果はどうなりますか?
A. 開始日と終了日が同じ日なら、同月内に収まるため結果は「1ヶ月」になります。たとえばA2・B2の両方に「6/15」が入っている場合、月初(6/1)と月末(6/30)に変換されたあとDATEDIFが「0」を返し、+1されて「1」になる流れです。筆者が実際に検証したところ、1日だけの契約でもその月を1ヶ月分として正しくカウントできることを確認しています。なお、開始日が終了日より後の日付だとDATEDIF関数が#NUM!エラーを返すので、入力データの前後関係だけは事前にチェックしておくのがおすすめです。
Q. DATEDIF関数を使わずに同じ結果を出す方法はありますか?
A. DATEDIF関数を避けたい場合は、YEAR関数とMONTH関数を組み合わせた数式で代替できます。具体的には =(YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2)+1 という書き方です。この数式は終了月と開始月の差を年・月の単位で計算し、+1で当月分を加算しています。筆者が両方の数式を比較検証したところ、結果はすべてのパターンで一致しました。DATEDIF関数の互換性が気になる場合は、こちらの代替式を使うとよいでしょう。ただし、DATEDIF版のほうが数式の意図を読み取りやすいというメリットはあります。
スポンサーリンク

まとめ

この記事では、DATEDIF関数とEOMONTH関数を組み合わせて「当月=1ヶ月」で月数を求める数式を解説しました。

 

ポイントを振り返ると、次の3つになります。

 

  • EOMONTH関数で開始日を「月初」、終了日を「月末」に変換する
  • DATEDIF関数に月初・月末を渡して満月数を求める
  • 月初〜月末の区間ではDATEDIFが常に1ヶ月少なくなるため、末尾で+1する

 

数式の完成形はこちらです。

 

=DATEDIF(EOMONTH(A2,-1)+1, EOMONTH(B2,0), “M”)+1

契約期間の集計やリース管理など、月単位のカウントが必要な業務でぜひ活用してみてください。

タイトルとURLをコピーしました