Excelには「1900年2月29日」がある

ちょっと古いのですが、面白い記事を読みました。
VBAの開発者が初めてビル・ゲイツにレビューをしたときの話なのですが、私が興味を持ったのは日付の計算に関するExcelの「バグ」です。

My First BillG Review – Joel on Software

Excelは日付を「1日」を「1.0」という数として管理しています。そして「1900年1月1日」を「1」とし、翌日を「2」としています。これを「シリアル値」と呼んでいます。
Excelの日付とシリアル値の関係は次の通りです。

Excelの表示 シリアル値
1900/1/1 1
1900/1/2 2
1900/1/3 3
1900/2/27 58
1900/2/28 59
1900/2/29 60
1900/3/1 61
1900/3/2 62
1900/3/3 63

年が4の倍数のとき、閏年で2月29日までありますが、年が100の倍数のときは例外として閏年になりません。
したがって1900年は閏年でないので2月29日はないはずです。
しかしExcelには「1900年2月29日」が存在します。
本文でも触れられていますが、これはExcelのバグではなく、当時、先行していたLotus123の仕様に意図的に合わせたもので、実はLotus123のバグだそうです。

余談ですがJavaScriptでは1900年は閏年ではありません。
次に示すのは1900年2月26日から1日ずつ足して表示したものですが2月29日はありません。

Mon Feb 26 00:00:00 UTC+0900 1900
Tue Feb 27 00:00:00 UTC+0900 1900
Wed Feb 28 00:00:00 UTC+0900 1900
Thu Mar 1 00:00:00 UTC+0900 1900
Fri Mar 2 00:00:00 UTC+0900 1900
Sat Mar 3 00:00:00 UTC+0900 1900

コメント

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