【Excel】2つの日付の差を計算するのは難しい

 2つの日付の差が、「何年何か月何日」かを計算する方法です。

動作確認Excel for Microsoft 365

 開始日のセルをA1、終了日のセルをB1とした場合の式です。例えば、開始日を2020年2月15日、終了日を2022年6月20日とすると、2年4か月5日が算出されます。


=DATEDIF(A1,B1,"Y")&"年"&DATEDIF(A1,B1,"YM")&"か月"&B1-EDATE(A1,DATEDIF(A1,B1,"M"))&"日"


// 意味
=(差の年月日の年) 年 (差の年月日の月) か月 (終了日 - 開始日から年月後の日) 日

式の実行例

 ただし、この式は月末から月末の判定が、上手くいかない場合があります。例えば、1月31日の1か月後は2月28日ではないようです。また、4月30日の1か月後は5月30日でしょうか? 5月31日でしょうか?

上手くいかない場合の式の実行例

 DATEDIFは、2つの日付の差を計算する関数です。いろいろ試してみると、開始日と終了日の「日」を比較して、開始日の「日」以上の数字なら、終了日を含む月を1か月にカウントしています。その際、開始日と終了日が月末かどうかは見ていないようです。

 EDATEは、開始日の何か月後(あるいは前)の日付を返す関数です。こちらは、単純に「月」を追加後、「日」は月末を超えません。つまり、1月31日の1か月後は2月28日(うるう年は2月29日)、4月30日の1か月後は5月30日、うるう年の2月29日の12か月後は2月28日という動作です。


=EDATE(開始日,月)

EDATE関数の実行例

 冒頭の式では使用していませんが、EOMONTHは、開始日の何か月後(あるいは前)の月末の日付を返す関数です。単純に「月」を追加後、その月の月末を返します。


=EOMONTH(開始日,月)

EOMONTH関数の実行例

 作成するシートの目的によって、法律や業界ルールにより、「1か月」「1年」の定義は常識と違うことがあります。 その定義とExcel関数の動作の両方をきちんと確認してから、正しい計算式を作りましょう。

リファレンス

Calculate the difference between two dates
https://support.microsoft.com/en-us/office/calculate-the-difference-between-two-dates-8235e7c9-b430-44ca-9425-46100a162f38
リンク先の「Calculate age in accumulated years, months, and days」の式は、開始日の「日」が「1日」のみに対応しているので、汎用的に使えるように改良したのが冒頭の式になります。

DATEDIF function
https://support.microsoft.com/en-us/office/datedif-function-25dba1a4-2812-480b-84dd-8b32a451b35c

EDATE function
https://support.microsoft.com/en-us/office/edate-function-3c920eb2-6e66-44e7-a1f5-753ae47ee4f5

EOMONTH function
https://support.microsoft.com/en-us/office/eomonth-function-7314ffa1-2bc9-4005-9d66-f49db127d628