エクセルで2つの日付の間が何か月あるのか計算したいとき、どう操作すればよいか迷ったことはありませんか。
勤続年数や契約期間、年齢計算など、業務のなかで「月数」を求める場面はよくあります。
この記事では、DATEDIF関数を使った正確な計算方法のほか、日付の引き算やYEAR/MONTH関数の組み合わせ、初月を含めるかどうかの処理方法、小数点以下の扱いや切り上げ・切り捨てまで、実務で役立つ手順をわかりやすく解説します。
ポイントは以下の3点です。
・DATEDIF関数で正確な月数を算出する方法
・YEAR関数とMONTH関数の組み合わせによる計算(代替手法)
・初月や初日を含めるかどうかで計算方法を調整
それでは詳しく見ていきましょう。
エクセルで月数を計算する方法1【DATEDIF関数を使った基本的な計算】
エクセルで2つの日付の間に何か月あるかを計算する、最も一般的な方法が DATEDIF関数 です。
DATEDIF関数は開始日と終了日の間の期間を年数・月数・日数などの単位で計算できる関数です。
たとえば、A2セルに開始日「2024/1/15」、B2セルに終了日「2025/10/23」が入力されているとします。

この2つの日付の間の月数を求めるには、以下の数式を入力します。
=DATEDIF(A2,B2,”M”)

すると、結果として「21」が表示されます。
これは開始日から終了日までに完全に経過した月数(満月数)を示しています。
DATEDIF関数の第3引数に”M”を指定すると、満月数(完全に経過した月数)が返されます。
DATEDIF関数の単位について
DATEDIF関数の第3引数では、以下のようにさまざまな単位を指定できます。
・”Y”…年数を返す
・”M”…月数を返す
・”D”…日数を返す
・”YM”…年を除いた月数を返す(例 1年3か月→3)
・”MD”…月を除いた日数を返す
用途に応じて使い分けましょう。
たとえば、勤続年数を「○年○か月」の形式で表示したい場合は、”Y”と”YM”を組み合わせます。
=DATEDIF(A2,B2,”Y”)&”年”&DATEDIF(A2,B2,”YM”)&”か月”
これで「1年9か月」のような表示が可能です。

操作のポイント【DATEDIF関数の”M”で満月数を取得】
エクセルで月数を計算する方法2【YEAR関数とMONTH関数を使った計算】
DATEDIF関数以外の方法として、YEAR関数とMONTH関数を組み合わせて月数を計算する方法があります。
この方法は、開始日と終了日の「年」と「月」だけを使って計算するため、DATEDIF関数が使えない環境でも利用できます。
年の差を12倍して月に換算し、月の差を加えることで総月数を求めるという考え方です。
A2セルに開始日、B2セルに終了日が入力されている場合、以下の数式を使います。
=(YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2)

この数式の仕組みは以下のとおりです。
・YEAR(B2)-YEAR(A2) で年の差を計算
・それに 12 を掛けて月数に換算
・MONTH(B2)-MONTH(A2) で月の差を計算
・それらを合計して総月数を取得
たとえば、2024年1月から2025年10月なら、年の差は1年(12か月)、月の差は9か月なので、合計21か月になります。
日を考慮しない計算
この方法は日付(日)を考慮しないため、月の途中の差も「1か月」として数えます。
たとえば、2024年1月31日 → 2024年2月1日のようなケースでも、この計算式は1か月と判定します。
そのため、日単位まで正確に判定したい場合は、DATEDIF関数を使うか、日を比較する条件分岐を追加してください。
(例)日も考慮して「満月数」を求めたい場合の一例:
=(YEAR(B2)-YEAR(A2))*12 + MONTH(B2) – MONTH(A2) – IF(DAY(B2) < DAY(A2), 1, 0)
この式では、終了日の「日」が開始日の「日」より小さい場合に1か月分を減算して、より厳密な満月数に近づけています。
操作のポイント【年の差×12+月の差で月数を算出】
エクセルで月数を計算する方法3【引き算による月数の計算】
日付を直接引き算して、その結果を月数に換算する方法もあります。
日付同士を引き算すると「日数」が返されるため、これを30で割って月数の概算を求めるという考え方です。
=(B2-A2)/30
ただし、この方法ではすべての月を30日として扱うため、正確な月数にはなりません。

より精度を高めたい場合は、平均月日数である 30.44 日 を使う方法もあります。
=(B2-A2)/30.44

とはいえ、この方法でも完全に正確な月数にはならないため、概算が必要な場面に限定して使うのがおすすめです。
正確な月数計算との使い分け
引き算による計算は、厳密さよりもスピードが優先される場面や、おおよその期間を知りたいときに便利です。
一方、契約書・請求書・公的手続きなど、正確な月数が求められる業務では必ず DATEDIF 関数を使用しましょう。
操作のポイント【引き算は概算、正確な計算にはDATEDIF関数を使用】
エクセルで月数に足し算・引き算をする方法
ある日付に対して、月数を加えたり減らしたりして新しい日付を求めたいケースがあります。
たとえば、契約開始日の 3か月後 や 6か月前 の日付を計算するような場面です。
EDATE関数を使った月の加算・減算
EDATE関数は、指定した日付から指定した月数だけ前後した日付を返す関数です。
A2セルの日付から3か月後の日付を求めるには、以下の数式を使用します。
=EDATE(A2,3)

逆に3か月前の日付を求める場合は、月数をマイナスで指定します。
=EDATE(A2,-3)

EDATE関数は月末日の調整も自動で行ってくれます。
たとえば、1月31日 の1か月後は 2月28日(または29日) となるなど、日付が存在しない場合でも適切に補正されます。
DATE関数を使った月の加算・減算
EDATE関数以外にも、DATE関数を使って月数を加減算する方法もあります。
=DATE(YEAR(A2),MONTH(A2)+3,DAY(A2))

この方法でも、指定した月数後の日付を求めることができます。
ただし、DATE関数では月末日の調整が必ずしも直感的に行われない場合があるため、
月の加算・減算にはEDATE関数の方が扱いやすく、実務でも一般的です。
操作のポイント【月の加減算にはEDATE関数が最適】
エクセルで初月や初日を含む月数計算
月数を計算する際は、「開始日や終了日を含むかどうか」で結果が変わります。
契約期間や勤続期間を算出する場合、この扱いは特に重要なポイントです。
初日を含まない場合(一般的な計算)
DATEDIF関数は基本的に 開始日を含まず、終了日を含まない 計算を行います。
つまり、実際の計算は 開始日の翌日から 始まります。
=DATEDIF(A2,B2,”M”)
この仕様は、一般的なビジネスで用いられる期間計算の考え方と一致しています。

初日を含む場合の計算
初日を含めて月数を計算したい場合は、開始日を 1日前にずらす 方法が有効です。
=DATEDIF(A2-1,B2,”M”)

または、終了日を 1日後ろにずらす 方法でも同じ効果が得られます。
=DATEDIF(A2,B2+1,”M”)

いずれの方法でも、初日を含んだ月数計算が可能です。
月の途中から途中までの計算
月の途中から別の月の途中までの期間を 小数点付きの月数 として表現したい場面もあります。
このような場合は、満月数に加えて、端数の日数を「月の一部」として計算します。
=DATEDIF(A2,B2,”M”)+DATEDIF(A2,B2,”MD”)/30

上記の式では、
・DATEDIF(…,”M”) で満月数
・DATEDIF(…,”MD”)/30 で余りの日数を30日換算した小数
を加算し、月数を小数で表現します。
操作のポイント【初日を含む場合は開始日を1日前にずらす】
エクセルで月数の小数点処理と切り上げ・切り捨て
月数を計算した結果に小数点が含まれる場合、その処理方法が重要になります。
用途に応じて切り上げ・切り捨て・四捨五入を使い分ける必要があります。
小数点以下を含む月数の計算
日付を引き算して日数を求め、それを平均月日数で割ることで、小数点付きの月数が計算できます。
=(B2-A2)/30.44

この方法を使うと、たとえば 「3.5か月」 のように小数で月数を表すことができます。
切り上げ(ROUNDUP関数)
月数を切り上げたい場合は、ROUNDUP関数を使用します。
たとえば、3.1か月でも 4か月としてカウントしたい 場合に使います。

=ROUNDUP((B2-A2)/30.44,0)

第2引数の0は、小数点第1位を切り上げて整数にすることを意味します。
切り捨て(ROUNDDOWN関数)
月数を切り捨てたい場合は、ROUNDDOWN関数を使用します。
3.9か月でも3か月として扱いたい場合です。

=ROUNDDOWN((B2-A2)/30.44,0)

DATEDIF関数の”M”も、実質的には「切り捨て」と同じ動作になります。
四捨五入(ROUND関数)
計算結果を四捨五入したい場合は ROUND 関数を使います。
=ROUND((B2-A2)/30.44,0)

・3.4か月 → 3か月
・3.5か月 → 4か月
のように、一般的な四捨五入で月数を処理できます。
小数点第1位まで表示する場合
小数点第1位まで表示したい場合は、第2引数を1にします。
=ROUND((B2-A2)/30.44,1)
これにより、「3.2か月」 のようなより細かな月数表示が可能になります。
操作のポイント【ROUNDUPで切り上げ、ROUNDDOWNで切り捨て】
エクセルで月数計算ができない原因と対策
月数を計算しようとしても、思ったとおりの結果が得られないことがあります。
ここでは、よくある原因とその解決方法を紹介します。
原因1 データが日付形式になっていない
最も多い原因は、セルに入力されているデータが日付形式ではなく、文字列になっていることです。
見た目は日付でも、エクセル内部で文字列扱いになっていると、日付関数は正しく動きません。
対策
対象のセルを選択し、数式バーや配置(左寄せ/右寄せ)で確認しましょう。
文字列の場合は左寄せ、日付は右寄せで表示されることが多いです。
文字列の日付は、DATEVALUE関数を使うことで日付形式に変換できます。
=DATEDIF(DATEVALUE(A2),DATEVALUE(B2),”M”)
これにより、文字列として入力された日付でも月数を計算できます。
原因2 開始日と終了日が逆になっている
DATEDIF関数は、
第1引数=開始日、第2引数=終了日
である必要があります。
終了日が開始日より前だとエラーになります。
「♯NUM」エラーは、引数に指定されている値が不適切な場合や、空白セルを参照しているときに発生します。
対策
日付の前後関係を確認し、必要に応じて順番を修正しましょう。
また、ABS関数を使えば、順序が逆でも計算できます。
=ABS((YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2))

この方法なら、開始日と終了日が逆でも月数が計算できます。
原因3 DATEDIF関数がエラーになる
DATEDIF関数はヘルプに記載されていない「隠し関数」のため、
環境によってはエラーが出る場合があります。
対策
DATEDIFが使えない場合は、YEAR関数とMONTH関数を組み合わせた式で代用できます。
=(YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2)
この方法は、どのバージョンのエクセルでも動作します。
原因4 空白セルを参照している
開始日または終了日が空白の場合、エラーや予期しない結果が返されることがあります。
対策
IFERROR関数やIF関数を使い、空白セルに対する処理を追加しましょう。
=IF(OR(A2=””,B2=””),””,DATEDIF(A2,B2,”M”))

どちらかが空白の場合は空白を返し、両方に入力があるときだけ月数を計算します。
操作のポイント【データ形式の確認と日付の順序が重要】
月数計算がうまくいかないときは、
①セルが日付形式かどうか
②開始日と終了日の順序が正しいか
この2点をまず確認することが大切です。
まとめ エクセルで月数計算(引き算・足し算・期間・datedif以外も・初月や初日も含む・切り上げ・小数点等)する方法
エクセルで月数を計算する方法をまとめると以下のとおりです。
・DATEDIF関数の「M」が最も正確で一般的
・YEAR関数とMONTH関数を組み合わせれば、DATEDIF以外で計算可能
・日数の引き算による計算は概算向きで、正確な月数が必要な場合はDATEDIF関数を使用
・月の加減算にはEDATE関数が最適
・初日を含めたい場合は、開始日を1日前にずらして計算する
・切り上げにはROUNDUP関数、切り捨てにはROUNDDOWN関数を使用
・データが文字列の場合は、DATEVALUE関数で日付に変換する必要がある
これらを状況に応じて使い分けることで、あらゆる月数計算に対応できます。
特にDATEDIF関数は、勤続期間や契約期間など、正確な月数が求められる場面で非常に有効です。
月数計算を習得しておけば、人事管理での勤続年数の算出、契約管理での期間集計、プロジェクト管理での工数計算など、幅広い業務で役立ちます。
給与計算や請求書作成で月割り計算が必要な場合も、これらの関数を使いこなすことで作業効率が大幅に向上します。
初月や初日を含めるか、小数点以下をどのように処理するかなど、業務要件に応じて適切な方法を選ぶことが重要です。
ぜひ今回紹介したテクニックを活用し、エクセル作業をさらに効率化していきましょう。


コメント