概要
「2つの日付の“月数差”」を最短で出すなら、DATEDIF関数の "m" を使います。"m" は開始日から終了日までの“丸めた月数”(端数の日を切り捨て)を返します。契約の経過月数、勤続月数、分割支払いの回数計算など“月単位”の集計で威力を発揮します。
基本の使い方
書式
=DATEDIF(開始日, 終了日, "m")
- 開始日 ≤ 終了日である必要があります(逆だと #NUM!)。
- 戻り値は「完全に経過した月数」。端数日はカウントされません。
例
=DATEDIF("2025/01/15","2025/12/17","m") // 11
1月15日→12月17日まで“完全に経過した月”は11か月(開始が15日、終了が17日なので12か月に満たず11)。
具体例
セル参照で月数差を取得
=DATEDIF(A2,B2,"m")
A2が「2024/04/10」、B2が「2025/04/09」なら「11」。翌年同月でも“9日 < 10日”なので満1年に満たず11か月。
今日までの経過月数
=DATEDIF(C2,TODAY(),"m")
入社日C2から今日まで“完全に経過した月数”を返します。
契約更新までの残り“満了月数”
=DATEDIF(TODAY(),D2,"m")
今日から契約終了日D2まで、満了ベースの残月数(端数日は含まない)。
応用テンプレート
年月差を“合計月数”として計算(端数切り捨て)
=DATEDIF(開始, 終了, "m")
最も簡単・安定。
年・月・日を分解(満年・満月・残日)
=DATEDIF(開始, 終了, "y") // 満年
=DATEDIF(開始, 終了, "ym") // 満年を除いた残りの満月
=DATEDIF(開始, 終了, "md") // 満年+満月を除いた残日
「◯年◯か月◯日」の表記に便利。
開始・終了が逆でも安全に(エラー回避)
=DATEDIF(MIN(E2,F2), MAX(E2,F2), "m")
順序が入れ替わっても常に正の月数差。
合計月数を数式で手計算(DATEDIFが使えない環境用)
=(YEAR(終了)-YEAR(開始))*12 + (MONTH(終了)-MONTH(開始)) - IF(DAY(終了)<DAY(開始),1,0)
端数日の有無を自前で調整(終了日の日が開始日より小さいと1か月引く)。
よくあるつまずきと対策
“端数日”は数えない仕様
DATEDIF(“m”)は「完全に経過した月」だけを返します。たとえば 1/31 → 2/28 は 0(1か月未満)。“翌月同日”で測りたいなら EDATE で基準をずらして比較します。
開始>終了はエラー
#NUM!になります。MIN/MAXで並べ替えるか、IFで事前チェックしてください。
文字列日付の解釈ズレ
「YYYY/MM/DD」が文字列扱いだと環境差で誤解釈することがあります。DATE関数で生成する、またはセルの表示形式を「日付」に。
“満◯か月”か“端数込み”かを使い分け
満月数なら DATEDIF(“m”)。端数込みの“月換算”なら年・月差を合計し、日による±調整を自前で入れるか、基準日を EDATE で揃えて判定します。
例題
問題1: A2セル(開始日)からB2セル(終了日)までの“満月数”をC2に表示してください。
解答例:
=DATEDIF(A2,B2,"m")
問題2: 入社日D2から今日までの“満月数”をE2に表示してください。
解答例:
=DATEDIF(D2,TODAY(),"m")
問題3: F2セル(開始日)とG2セル(終了日)の順序が逆でも正しい“満月数”をH2に表示してください。
解答例:
=DATEDIF(MIN(F2,G2),MAX(F2,G2),"m")
問題4: I2セル(開始日)からJ2セル(終了日)までを「◯年◯か月◯日」でK2に表示してください。
解答例:
=DATEDIF(I2,J2,"y")&"年"&DATEDIF(I2,J2,"ym")&"か月"&DATEDIF(I2,J2,"md")&"日"
問題5: L2セル(開始)からM2セル(終了)までの“合計月数”を、DATEDIFを使わず数式でN2に表示してください。
解答例:
=(YEAR(M2)-YEAR(L2))*12 + (MONTH(M2)-MONTH(L2)) - IF(DAY(M2)<DAY(L2),1,0)
まとめ
DATEDIF(“m”)は「満月数」を一発で返す、月差計算の定番です。端数日を含めない仕様を理解し、順序エラーを避けるだけで“契約月数・勤続月数・支払い回数”が安定して求まります。表記を分解するなら “y”/”ym”/”md”、同日比較なら EDATE——この使い分けを押さえると、月単位の日付処理がぐっと楽になります。
