Menu

DATEDIF関数の使い方: 2つの日付の間の年数・月数・日数

=DATEDIF(A2,B2,"M")は、A2の開始日からB2の終了日までの満月数を数えます。単位Y、M、D、YM、MD、YDの意味、DATEDIFが関数の一覧にない理由、#NUM!エラーを学びます。

このページのシートはすべて実際に動きます。数値や数式を変えると再計算されます。

=DATEDIF(A2,B2,"M")は、A2の開始日からB2の終了日までの満月数を数えます。3つ目の引数の単位で、何を数えるかが決まります。"Y"は年数、"M"は月数、"D"は日数で、ほかに日付の一部を無視する単位が3つあります。

1組の日付ですべての単位を試す
E3
ABCDE
1StartEndUnitResult
22024-04-152026-09-10Y2
3M28
4D878
5YM4
6MD26
7YD148
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

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日として数えます)。

サブスクリプションごとの月数
C2
ABCD
1StartEndFull monthsDecimal months
22025-03-102026-01-0599.8
32024-04-152026-09-102828.8
42026-01-312026-02-2800.9
52025-11-012026-05-0166.0
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

1つ目のサブスクリプションは満9か月続きました。1月5日は10日より前なので、10か月目は数えられません。3行目は1月31日の場合で、0か月です。

年数、月数、日数をまとめて出す

"Y"、"YM"、"MD"は一緒に使うためにあります。それぞれが前の単位の止まったところから数えるので、3つで「正確にどれだけの期間か」がわかります。上の日付なら2年4か月26日です。年齢の計算では、同じ3つの単位を生年月日に使っています。

勤続期間
E2
ABCDEF
1HiredYearsMonthsDaysServiceAs of
22019-06-0373277y 3m 27d2026-09-30
32023-11-20210102y 10m 10d
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

1人目の社員は、2026-09-30の時点で勤続7年3か月27日です。

DATEDIFが#NUM!を返す理由

DATEDIFは逆向きには数えません。開始日が終了日より後だと、結果は#NUM!になります。順番が変わりうるなら、MINで早いほうの日付を、MAXで遅いほうの日付をDATEDIFに渡します。

開始日が終了日より後
C2
ABCD
1StartEndDATEDIFWith MIN and MAX
22026-03-102026-01-05#NUM!64
#NUM! 数値がこの関数で使える範囲を超えています。

C2は#NUM!を表示し、D2は64を返します。日数だけなら、DATEDIFを使わなくても=ABS(B2-A2)で同じ64になります。DATEDIFは"W"のような知らない単位にも#NUM!を、Excelが日付として読めない文字列の日付には#VALUE!を返します。

MDの単位は間違うことがある

Microsoft自身のドキュメントも"MD"を使わないよう勧めています。開始日の日が終了日の前の月に存在しないと、マイナスの数を返すことがあるからです。

1月31日からのMD
C2
ABCD
1StartEndMDD
22026-01-312026-03-01-229
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

1月31日から3月1日までの"MD"の結果は-2です。DATEDIFは「2月31日」から数え、それが繰り越されて3月3日になり、終了日の2日後になるからです。日数の29は正しい値です。開始日が29日から31日になりうるときは、期間を日数で表示するか、MDの値を手で確かめてください。

練習: 月数を数える

やってみよう
C2
ABC
1StartEndMonths
22025-03-102026-01-05
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: C2に、A2の開始日からB2の終了日までの満月数を数えてください。

やってみよう: どちらの順番でも
C2
ABC
1Date 1Date 2Days
22026-04-182026-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スプレッドシートは関数のヘルプにも載せています。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める