エクセルとうるう年のお話
2020年2月29日 (土) 投稿者: メディア技術コース
助教の戀津です。
今日は2020年の2月29日、4年に一度のうるう年のうるう日ですね。
せっかくなので、うるう年にまつわるおもしろメディア学です。
うるう年は4年に一度、2月に29日が入るというものですが、実は単に4年に一度ではありません。
西暦の年数が・・・
・4で割り切れるときはうるう年とする
・ただし100でも割り切れるときはうるう年としない
・ただし400でも割り切れるときはうるう年とする
という条件になっています。
条件だけ見ると複雑ですが、後ろ2つは具体的には1900年はうるう年ではなく、2000年はうるう年です。
100年単位で見れば次は2100年・2200年・2300年がうるう年ではなく、2400年がうるう年ということです。
2000年もうるう年だったので、4で割り切れるうるう年でない年は120年間来ていないことになります。
ここまでうるう年自体のお話でしたが、エクセルとはどんな関係があるかというと、実はエクセルの日付計算機能にはうるう年に関するバグがあるのです。
先ほど話した通り、1900年はうるう年ではないのですが、エクセルの機能で日付を見ると1900/2/29が存在しています。
1900年から2400年までの2/26から7日間を表示してみました。
2100年から2300年は2/28の次が3/1になっていて、2000年、2400年は正しく2/29になっています。
そして、1900年にも2/29が現れています。
つまり、エクセルの日付計算機能上は1900年がうるう年として扱われているのです。一般的に考えて、これはバグですね。
なぜこうなっているかというと、エクセルが開発された当時はLotus 1-2-3というソフトが表計算ソフトの主流でしたが、このソフトに1900年をうるう年とするバグがありました。
マイクロソフトとしてはエクセルを売り出したいので、現在主流のLotus 1-2-3を使っている人が同じデータをそのまま使って乗り換えできるようにする必要がありました。
そのため、Lotus 1-2-3と同じ方式で日付計算を行うように設計し互換性を持たせました。これによってエクセルでも1900年はうるう年という誤った情報のままになっているというわけです。
この、互換性を優先して故意にバグを仕込むというのは大変興味深い判断です。
バグ、つまり誤りは正すのが普通ですが、あえて残すどころかわざわざ発生させています。
しかし、もちろんそれをするに足る合理的な理由があります。もしこれを開発当時に修正すればLotus 1-2-3との互換性がなくなり、厳しいシェア争いが必要になりました。
また、もしも今からこのバグを修正すると、これまでに作られた世界中のエクセルファイル全ての日付が1日ずれてしまうという甚大な問題が発生します。
それに対し、1900年をうるう年のままにした場合に起きる問題は、「1900年の1月1日~2月28日の曜日がズレてしまう」というだけです。
エクセルでは1900年以前をもともと日付として扱えないので、このごくわずかな期間、しかもその期間の曜日を計算するというごくごく限られた場面でのみ問題が生じます。(そんなことする人いるのかな・・・?)
つまり、バグを修正した方がより大きな問題が発生するということになります。
これらを総合的に判断した結果、今でもエクセルには1900年の2月29日が存在しているというわけです。
うるう年にまつわる、表計算ソフトの歴史のお話でした。