(EXCEL)DATEDIF関数の挙動確認

EXCELで生年月日に対する今日の年齢を出す方法を探した所、DATEDIF関数なるものを見つけたので挙動の調査。

関数の内容

EXCELのHELP見てみるとこんな感じ

=DATEDIF(開始日,終了日,単位)

 開始日から終了日までで、何年たったか数値を返す。

注: 開始日が終了日よりも大きい場合、結果は #NUM

単位 戻り値
“Y” 期間の年数です。
“M” 期間の月数です。
“D” 期間の日数です。
“MD” 開始日から終了日までの日数です。 日付の月数および年数は無視されます。 重要: 制限事項があるため、”MD” 引数の使用はお勧めしません。 以下の既知の問題のセクションを参照してください。
“YM” 開始日から終了日までの月数です。 日付の日数および年数は無視されます。
“YD” 開始日から終了日までの日数です。 日付の年数は無視されます。

挙動テスト

仕様EXCEL: Microsoft Office Standard 2016

テスト内容

入力 出力 備考
=DATEDIF(“2000/1/1″,”2000/12/31″,”Y”) 0 1年過ぎてないので0年
=DATEDIF(“2000/1/1”,”2001/1/1″,”Y”) 1 2000/1/1に対して1年経過
=DATEDIF(“2000/1/1″,”2000/12/31″,”YD“) 365 2000年はうるう年のため366日の内、365日経過
=DATEDIF(“2000/1/1″,”2000/1/1″,”YD“) 0  
=DATEDIF(“2000/1/1”,”2000/1/2“,”YD“) 1  
=DATEDIF(“2000/1/1”,”2001/1/2“,”YD“) 1

1年と1日経過。経過した1日のみ表示。年数分も日にちで欲しければ”D”を使う。EXCELは1900/1/1からの経過日数で日付を取り扱っているので、

=”2001/1/2″-“2000/1/1”

と打っても367と出る。

=DATEDIF(“2000/1/1”,”2001/12/31″,”YD“)  365 ???
2001年は365日なのに364にならない・・・ 
=DATEDIF(“2001/1/1″,”2001/12/31″,”YD“) 364 うるう年じゃない2001年スタートにすると、正しく364となる。
=DATEDIF(“2000/1/1”,”2001/2/28“,”YD“) 58 正しく表示される
=DATEDIF(“2000/1/1”,”2001/3/1“,”YD“) 60  お。59とならない。。。
因みに、存在しない”2001/2/29″を入れるとエラーが出る。
=DATEDIF(“2000/1/2“,”2001/2/28“,”YD“) 57 正しく表示される
=DATEDIF(“2000/1/2“,”2001/3/1“,”YD“) 58 正しく表示される

 

考察

開始日: 2000/1/1だけでなく、開始日: 2004/1/1でも同様にカウントが58、60と跳んだため、開始日がうるう年の1/1だと出るバグのようです。何かの分枝をしくってるんでしょうね。。。

基本的には問題なさそうですが、少し注意が必要そうです。気になる人は、if分で判定する必要ありそう。

開始日うるう年の1/1→終了日がうるう年じゃない→DATEDIFで3/1までが60日→バグ対応

みたいな感じか。うん、めんどいw

参考(今日の年齢)

=DATEDIF(「誕生日を記入したセル」, TODAY(),”Y”)

※TODAY関数使うと、次開いたときに自動更新されてしまいます。特定の日の年齢を知りたい場合、普通にセルに対象の日付を入れて指定する方が良いです。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です