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

コメント

PAGE TOP
Ads Block Detector Powered by codehelppro.com
Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました