=DATEDIF(A2,B2,"M")は、A2の開始日からB2の終了日までの満月数を数えます。3つ目の引数の単位で、何を数えるかが決まります。"Y"は年数、"M"は月数、"D"は日数で、ほかに日付の一部を無視する単位が3つあります。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Start | End | Unit | Result | |
| 2 | 2024-04-15 | 2026-09-10 | Y | 2 | |
| 3 | M | 28 | |||
| 4 | D | 878 | |||
| 5 | YM | 4 | |||
| 6 | MD | 26 | |||
| 7 | YD | 148 |
2024-04-15から2026-09-10までは、満2年、満28か月、878日です。B2の終了日を変えて、各単位がどう動くかを見てください。単位は数式に直接書くこともでき("M")、ここのようにセルから読むこともできます。
DATEDIF関数の構文と単位
=DATEDIF(start_date, end_date, unit)
| 単位 | 数えるもの | 2024-04-15から2026-09-10 |
|---|---|---|
"Y" | 満年数 | 2 |
"M" | 満月数 | 28 |
"D" | 日数 | 878 |
"YM" | 最後の満年からの月数 | 4 |
"MD" | 最後の満月からの日数 | 26 |
"YD" | 最後の満年からの日数 | 148 |
「満」とは、DATEDIFが決して切り上げないということです。1月31日から2月28日までは0か月です。2月28日は1か月の区切りより前だからです。単位は大文字と小文字を区別しません("m"でも動きます)が、引用符で囲むかセルに入れる必要があります。
DATEDIFが関数の一覧にない理由
DATEDIFはLotus 1-2-3からExcelに来た関数で、Microsoftは互換性のためだけに残しています。「関数の挿入」ダイアログにはなく、数式のオートコンプリートも候補に出さず、引数のヒントも表示されません。それでもWindowsとMacのすべてのバージョンのExcelと、Googleスプレッドシートで計算できます。名前と開きかっこまで=DATEDIF(と全部入力し、引数を自分で加えてください。
2つの日付の間の月数
契約、サブスクリプション、在籍期間のレポートで必要になるのは、たいてい満月数です。小数で出したいときは、YEARFRAC(A2,B2)*12が端数付きの月数を返します(既定の基準では、どの月も30日として数えます)。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | End | Full months | Decimal months |
| 2 | 2025-03-10 | 2026-01-05 | 9 | 9.8 |
| 3 | 2024-04-15 | 2026-09-10 | 28 | 28.8 |
| 4 | 2026-01-31 | 2026-02-28 | 0 | 0.9 |
| 5 | 2025-11-01 | 2026-05-01 | 6 | 6.0 |
1つ目のサブスクリプションは満9か月続きました。1月5日は10日より前なので、10か月目は数えられません。3行目は1月31日の場合で、0か月です。
年数、月数、日数をまとめて出す
"Y"、"YM"、"MD"は一緒に使うためにあります。それぞれが前の単位の止まったところから数えるので、3つで「正確にどれだけの期間か」がわかります。上の日付なら2年4か月26日です。年齢の計算では、同じ3つの単位を生年月日に使っています。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Hired | Years | Months | Days | Service | As of |
| 2 | 2019-06-03 | 7 | 3 | 27 | 7y 3m 27d | 2026-09-30 |
| 3 | 2023-11-20 | 2 | 10 | 10 | 2y 10m 10d |
1人目の社員は、2026-09-30の時点で勤続7年3か月27日です。
DATEDIFが#NUM!を返す理由
DATEDIFは逆向きには数えません。開始日が終了日より後だと、結果は#NUM!になります。順番が変わりうるなら、MINで早いほうの日付を、MAXで遅いほうの日付をDATEDIFに渡します。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | End | DATEDIF | With MIN and MAX |
| 2 | 2026-03-10 | 2026-01-05 | #NUM! | 64 |
#NUM! 数値がこの関数で使える範囲を超えています。C2は#NUM!を表示し、D2は64を返します。日数だけなら、DATEDIFを使わなくても=ABS(B2-A2)で同じ64になります。DATEDIFは"W"のような知らない単位にも#NUM!を、Excelが日付として読めない文字列の日付には#VALUE!を返します。
MDの単位は間違うことがある
Microsoft自身のドキュメントも"MD"を使わないよう勧めています。開始日の日が終了日の前の月に存在しないと、マイナスの数を返すことがあるからです。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | End | MD | D |
| 2 | 2026-01-31 | 2026-03-01 | -2 | 29 |
1月31日から3月1日までの"MD"の結果は-2です。DATEDIFは「2月31日」から数え、それが繰り越されて3月3日になり、終了日の2日後になるからです。日数の29は正しい値です。開始日が29日から31日になりうるときは、期間を日数で表示するか、MDの値を手で確かめてください。
練習: 月数を数える
| A | B | C | |
|---|---|---|---|
| 1 | Start | End | Months |
| 2 | 2025-03-10 | 2026-01-05 |
やってみよう: C2に、A2の開始日からB2の終了日までの満月数を数えてください。
| A | B | C | |
|---|---|---|---|
| 1 | Date 1 | Date 2 | Days |
| 2 | 2026-04-18 | 2026-02-01 |
やってみよう: C2に、2つの日付のどちらが先でも、その間の日数を数えてください。
よくある質問
ExcelのDATEDIFは何をしますか?
2つの日付の間の満年数、満月数、日数を数えます。年数は=DATEDIF(A2,B2,"Y")、月数は"M"、日数は"D"です。開始日を先に書く必要があります。
ExcelでDATEDIFが見つからないのはなぜですか?
DATEDIFはLotus 1-2-3との互換性のために残されている関数なので、Excelは「関数の挿入」ダイアログにも数式のオートコンプリートにも表示しません。それでもどのバージョンでも動きます。=DATEDIF(まで全部入力し、引数を自分で加えてください。
DATEDIFが#NUM!を返すのはなぜですか?
開始日が終了日より後になっているからです。引数を入れ替えるか、どちらが先かわからないときは=DATEDIF(MIN(A2,B2),MAX(A2,B2),"D")を使います。
DATEDIFのYM、MD、YDの違いは何ですか?
日付の一部を無視して数えます。"YM"は満年数を除いた残りの月数、"MD"は満月数を除いた残りの日数、"YD"は満年数を除いた残りの日数です。"Y"、"YM"、"MD"を合わせると、何年何か月何日という年齢になります。
DATEDIFはGoogleスプレッドシートで使えますか?
使えます。引数も単位も同じです。Excelと違い、Googleスプレッドシートは関数のヘルプにも載せています。