DATEDIF関数の使い方|経過した年数・月数・日数

DATEDIF関数の使い方|経過した年数・月数・日数

Excel(エクセル)DATEDIF関数の使い方|日付の間の年数・月数・日数

DATEDIFは期間の年数・月数・日数を求める関数です。DATEDIF関数を使う方法、引数の指定の仕方、DATEDIFで生じるバグや#NUM!エラー、不正確な結果への対処法、DATEDIFの代替になる関数について、できるだけ分かりやすく図解しています。

使用関数:DATEDIF

DATEDIFが使えない?

エクセルで年齢や勤続年数を計算しようとDATEDIF関数をいくら探してもない! これはExcelのバージョンが古いからでもオプション設定されてないからでもありません。Excel365でも2010でもDATEDIFは関数の「日付/時刻」に載っていません。「関数の挿入」からも「関数ライブラリ」からもアクセスできないので、手入力で操作するしかないのです。ダイアログボックスでの操作に慣れていると少し戸惑いますが、始めてみれば簡単です。

DATEDIF関数とは?

DATEDIFの読み方と意味

DATEDIFは「日付間の差分」を意味します。デート・ディフと読みます。
2つの日付の間の年数・月数・日数を求める関数で、開始日からどれだけ経過したかを計算します。

DATEDIF関数の使い方

DATEDIF関数の引数は3つです。
DATEDIF関数の引数

  • DATEDIF関数の第一引数「開始日」は年・月・日数を計算する始点となる日付を指定
  • DATEDIF関数の第二引数「終了日」は年・月・日数を計算する終点となる日付を指定
  • DATEDIF関数の第三引数「単位」は計算方法を以下の表の単位で指定
    "Y" 満年数を計算する
    "M" 満月数を計算する
    "D" 満日数を計算する
    "YM" 1年に満たない月数
    "YD" 1年に満たない日数
    "MD" 1月に満たない日数

DATEDIF関数で年齢を計算する

実際にDATEDIFを使ってみましょう。下図の表で誕生日から年齢を割り出してみます。
※C1セルにはTODAY関数「TODAY()」を入力、今日の日付が表示されています。
DATEDIFで誕生日から年齢を計算する表

  • 年齢のセルを選択して、DATEDIFを直接入力していきます。
    まず「=」を入力、その後に「DATEDIF」と続けます。途中、関数の候補が表示されますが、無視して最後まで入力しましょう。その後に半角丸カッコ開始「(」を入力します。
    年齢のセルに=DATEDIF(と入力
  • 続けて、生年月日の入ったセルをクリック、セル番地が入力されたら半角カンマ「,」を打ちます。
    DATEDIFの第一引数に生年月日の入ったセル番地を入力し半角カンマを打つ
  • TODAY関数の入ったC1セルをクリックし、セル番地が入力されたらF4キーで絶対参照にします。半角カンマ「,」を打ちます。
    DATEDIFの第二引数にTODAY関数の入ったセル番地を入力し半角カンマを打つ
  • 最後の引数の単位を文字列として入力します。生年月日を年齢に置換えるので、「"Y"」(満年数を計算する)を入力、丸括弧を閉じます。
    最後の引数の単位を文字列として入力
  • Enterを押して数式を確定すると、満年齢が計算されます。「年齢」の列の下までDATEDIFの数式をフィルコピーします。
    「年齢」の列の下までDATEDIFの数式をフィルコピー

終了日にTODAY関数を直接入力することもできます。
=DATEDIF(C4,TODAY(),”Y”)

DATEDIF関数を使うときの注意点

DATEDIFには時としてバグを引き起こしたり、#NUM!エラーが返されたり、結果が不正確だったりします。
Excelの「DATEDIF」のHELPには冒頭に「DATEDIF関数では、特定のシナリオで誤った計算結果を返すことがあります。」という注意書きが掲載されています。
Excelの「DATEDIF」のHELP

DATEDIFの単位”MD”の制限

DATEDIFの第三引数の単位に“MD”を指定する時は注意が必要です。経過日数を求める単位ですが、「1月に満たない日数」という制限があります。
Excelの「DATEDIF」のHELPにも「重要:制限事項があるため、”MD”引数の使用はお勧めしません」という但し書きが添えられています。
「DATEDIF」のHELP「重要:制限事項があるため、"MD"引数の使用はお勧めしません」

例えば、「2021/4/28」と「2021/5/28」の経過日数をDATEDIFで求めると「0」が返されます。「1月に満たない日数」の「1月」は開始日の月の日数(この場合は4月なので30日)で、「30日に満たない=29日まで」ということのようです。これを過ぎちゃうと不正確な結果が返されるわけですね。
DATEDIFで「2021/4/28」「2021/5/28」の経過日数をMDで計算すると「0」になる
正確さが要求されるデータには”MD”指定の数式は避けるべきかもしれません。

DATEDIF関数で#NUM!エラー

「開始日」より「終了日」が過去の日付になっていると#NUM!エラーになります。DATEDIFでは過去に遡って期間を求めることはできません。
DATEDIFで「開始日」より「終了日」が過去の日付になっていると#NUM!エラー

DATEDIF関数で勤続日数を計算すると1日少ない?

入社日が「2011/9/2」で、退社日が「2012/9/1」なら、ちょうど一年の勤続年数になると思いますが、DATEDIF関数で計算すると1日少なくなります。
DATEDIF関数で勤続日数を計算すると1日少ない
これはDATEDIF関数で「開始日」が経過日数に加算されないためです。
「入社日」も含めて勤続日数を計算したい場合は、第二引数の「終了日」セルに「+1」を付け加えて対処します。
(年数)=DATEDIF(B4,C4+1,”Y”) のように入力します。
DATEDIF関数の第二引数の「終了日」セルに「+1」を付け加えて計算する

DATEDIFの代わりに使える関数

DATEDIFの代替になる関数と言えばYEARFRAC関数です。
=YEARFRAC(開始日,終了日,基準)
引数も似ていて、年齢計算も勤続年数の計算もできます。

ただ、どういう関数なのか直感的にイメージしにくい欠点があり、結果も期間が1年間に占める割合という形で計算されるので小数点以下がズラッと並びます。
小数点以下の処理は、表示形式を使うと四捨五入されるのでROUNDDOWN関数にネストして丸めます。
YEARFRACで年齢計算
=ROUNDDOWN(YEARFRAC(C4,$C$1,1),0)

YEARFRAC関数の第三引数「基準」は割合の基準になる日数を指定するもので、これもかなり分かりづらいんですが、年齢計算や勤続年数の計算なら、とりあえず上の例のように「1(実際の日数を元にした基準)」を指定しておきましょう。

まとめ
  • DATEDIF(デート・ディフ)は2つの日付の間の年数・月数・日数を求める関数で、開始日からどれだけ経過したかを計算します
  • DATEDIF関数は「関数の挿入」「関数ライブラリ」にはありません。手入力で使います
  • DATEDIF関数の第一引数は「開始日」第二引数は「終了日」。通常はセル参照で指定します
  • DATEDIF関数の第三引数は「単位」で、定数を文字列で指定します
  • DATEDIF関数はバグやエラー、不正確な結果が生じやすい関数でもあり、特に単位に”MD”を指定する時は注意が必要です
  • DATEDIF関数は「開始日」を含めずに経過期間を計算します。この補正は「終了日」+1で行います
  • DATEDIF関数に代わる関数にはYEARFRAC関数があります
タイトルとURLをコピーしました