DATEDIFの日数計算の不具合
Excelのワークシート関数の「DATEDIF」で引数に「MD」を使うと月未満の日数が計算できます。
バグがあることで有名ですが、具体的な不具合を挙げておきます。
月末から1日まで
明らかにおかしいのは終期を3月1日にした場合。値がマイナスになります。
DATEDIFのロジックはおそらく終期の前月の応当日から数えるようになっているようです。「2月31日から3月1日まで」というありえない日付で計算するのでこのような不具合が生じるのだと思います。
始期 | 終期 | DATEDIF(MD) |
2001/7/31 | 2002/1/1 | 1 |
2001/7/31 | 2002/2/1 | 1 |
2001/7/31 | 2002/3/1 | -2 |
2001/7/31 | 2002/4/1 | 1 |
2001/7/31 | 2002/5/1 | 0 |
2001/7/31 | 2002/6/1 | 1 |
2001/7/31 | 2002/7/1 | 0 |
2001/7/31 | 2002/8/1 | 1 |
2001/7/31 | 2002/9/1 | 1 |
2001/7/31 | 2002/10/1 | 0 |
2001/7/31 | 2002/11/1 | 1 |
2001/7/31 | 2002/12/1 | 0 |
2日から1日まで
明らかにおかしいのは終期が閏年の場合。値が31より大きくなります。
始期 | 終期 | DATEDIF(MD) |
2001/10/2 | 2002/1/1 | 30 |
2001/10/2 | 2003/1/1 | 30 |
2001/10/2 | 2004/1/1 | 143 |
2001/10/2 | 2005/1/1 | 30 |
2001/10/2 | 2006/1/1 | 30 |
2001/10/2 | 2007/1/1 | 30 |
2001/10/2 | 2008/1/1 | 143 |
2001/10/2 | 2009/1/1 | 30 |
2001/10/2 | 2010/1/1 | 30 |
2001/10/2 | 2011/1/1 | 30 |
2001/10/2 | 2012/1/1 | 143 |
2月末日から1日まで
正しいのは終期が3月1日のときだけで他はすべてダメです。
これも前月の応当日から数えるようなロジックが原因だと思われます。
始期 | 終期 | DATEDIF(MD) |
2001/2/28 | 2002/1/1 | 4 |
2001/2/28 | 2002/2/1 | 4 |
2001/2/28 | 2002/3/1 | 1 |
2001/2/28 | 2002/4/1 | 4 |
2001/2/28 | 2002/5/1 | 3 |
2001/2/28 | 2002/6/1 | 4 |
2001/2/28 | 2002/7/1 | 3 |
2001/2/28 | 2002/8/1 | 4 |
2001/2/28 | 2002/9/1 | 4 |
2001/2/28 | 2002/10/1 | 3 |
2001/2/28 | 2002/11/1 | 4 |
2001/2/28 | 2002/12/1 | 3 |
[ 2010年11月4日 | カテゴリー: Excel | タグ: 日付 , 関数 ]
« 軽い力で留められるホッチキス「サクリフラット」 | 日本シリーズ第6戦は引き分け(2010年) »
コメントを残す