今回は、ExcelのDATEDIF関数を使って、2つの日付の間の経過期間を年・月・日の単位で計算する方法を紹介します。プロジェクトの開始日からの経過年数や、機器を使い始めてからの月数など、「どれくらいの期間がたったか」を知りたい場面は意外と多くあります。DATEDIF関数を使うと、単位を指定するだけで期間を数値として求められます。
この記事では、Windows版のExcel(Microsoft 365などのデスクトップアプリ)を前提に説明します。関数の書き方自体は、他の環境でも基本的に同じです。
DATEDIF関数の基本
DATEDIF関数は、開始日と終了日の差を、指定した単位で返す関数です。書式は次のとおりです。
=DATEDIF(開始日,終了日,単位)
- 開始日:期間の始まりの日付
- 終了日:期間の終わりの日付
- 単位:結果をどの単位で返すかを、二重引用符で囲んだ文字で指定
日付は、セル参照のほか、”2026/4/1″のように二重引用符で囲んだ文字列や、他の関数の結果でも指定できます。実務では、日付を入力したセルを参照する形が扱いやすいでしょう。
指定できる単位
単位には、次の文字を指定します。
- “Y”:期間内の満年数
- “M”:期間内の満月数
- “D”:期間内の日数
- “YM”:1年未満の端数の月数(日と年は無視)
- “YD”:年を無視したときの日数
- “MD”:月と年を無視したときの日数(後述の注意点あり)
“Y”や”M”は「満」で数えるため、1年に1日足りない場合は0年として扱われます。経過期間を切り捨てで数えたいときに向いています。
単位ごとの計算例
A2に開始日、B2に終了日が入力されているとして、よく使う計算例を見ていきます。
経過年数を求める
=DATEDIF(A2,B2,”Y”)
開始日が2001/1/1、終了日が2003/1/1であれば、結果は2になります。プロジェクトの継続年数や、製品の使用年数などを求めるときに使えます。
経過月数を求める
=DATEDIF(A2,B2,”M”)
期間の中に含まれる満月数を返します。月単位で管理しているスケジュールの進み具合を確認したいときに便利です。
経過日数や週数を求める
=DATEDIF(A2,B2,”D”)
開始日が2001/6/1、終了日が2002/8/15であれば、結果は440になります。週単位で知りたい場合は、日数を7で割る形にします。
=DATEDIF(A2,B2,”D”)/7
週数は小数になることがあるため、Ctrl+1キーで[セルの書式設定]を開き、表示する小数点以下の桁数を調整すると見やすくなります。
年を無視した日数を求める
=DATEDIF(A2,B2,”YD”)
開始日が2001/6/1、終了日が2002/8/15であれば、年の違いは無視され、6月1日から8月15日までの75が返ります。毎年の記念日から何日たったかを知りたい場合などに使えます。
「〇年〇か月」の形で期間を表示する
経過期間を「2年4か月」のように、年と月を組み合わせて表示したい場合は、単位”Y”と”YM”を組み合わせます。
- “Y”で満年数を求めます:=DATEDIF(A2,B2,”Y”)
- “YM”で、1年に満たない残りの月数を求めます:=DATEDIF(A2,B2,”YM”)
- 文字列をつなぐ「&」を使い、1つのセルにまとめます。
1つのセルにまとめた数式は、次のようになります。
=DATEDIF(A2,B2,”Y”)&”年”&DATEDIF(A2,B2,”YM”)&”か月”
数式が長くなって読みにくいときは、数式の途中でAlt+Enterキーを押すと、数式内に改行を入れて見やすく整えられます。数式バーに全体が表示されない場合は、Ctrl+Shift+Uキーで数式バーを広げられます。
“MD”を使うときの注意点
単位”MD”は、月と年を無視して日の差を求めるものですが、Microsoftの公式情報では、負の値やゼロ、不正確な結果を返すことがあるとして、使用は推奨されていません。「〇年〇か月〇日」の「日」の部分を求めたい場合は、別の数式で計算する方法が紹介されています。
例えば、終了日がB2にある場合、次のような数式で、終了日の月の1日から終了日までの日数を求められます。
=B2-DATE(YEAR(B2),MONTH(B2),1)
DATE関数で終了日と同じ年・月の1日を作り、それを終了日から引くしくみです。終了日が2016/5/6であれば、2016/5/1を引いて5が返ります。この方法は終了月の1日を起点に数えるため、開始日の日付によっては求めたい日数と異なることがあります。結果を一度確認し、目的に合っているかを確かめてから使いましょう。
今日までの経過期間を自動で計算する
終了日のセルを用意する代わりに、TODAY関数を組み合わせると、今日までの経過期間を求められます。
=DATEDIF(A2,TODAY(),”M”)
TODAY関数は、パソコンの現在の日付を返します。ファイルを開くたびに結果が更新されるため、進行中の作業の経過月数を常に最新の状態で表示したいときに便利です。一方で、ある時点の結果を残しておきたい場合は、終了日を固定の日付で入力するか、計算結果を値として貼り付けておくとよいでしょう。
エラーや思わぬ結果を防ぐコツ
DATEDIF関数を使うときに押さえておきたいポイントをまとめます。
- 開始日と終了日の順番:開始日が終了日より後の日付だと、結果は#NUM!エラーになります。エラーが出たら、まず2つの日付の順番を確認しましょう。
- 日付が日付として入力されているか:日付が文字列として入っていると、期待した結果にならないことがあります。セルの表示形式や入力内容を確かめておくと安心です。
- 日数だけなら引き算で十分:Excelでは日付が連続した数値(シリアル値)として保存されているため、単純な日数であれば「=B2-A2」のように終了日から開始日を引くだけで求められます。
- 関数の位置づけを知っておく:DATEDIF関数は、古い表計算ソフトのブックとの互換性のために用意されている関数で、場面によっては誤った結果を返すことがあると案内されています。重要な計算では、結果を目視でも確認すると安心です。
まとめ
ExcelのDATEDIF関数を使うと、開始日と終了日から、満年数・満月数・日数などの経過期間を単位を指定するだけで求められます。”Y”と”YM”を組み合わせれば「〇年〇か月」の形で表示でき、TODAY関数と組み合わせれば今日までの期間を自動で計算できます。
一方で、”MD”は不正確な結果になることがあるため避け、日の端数は別の数式で求めるのがポイントです。日数だけなら単純な引き算でも求められるので、目的に合わせて使い分けながら、日付の計算を効率よく進めてみてください。