知っていると何かのときに役に立つかもしれないITに関するマメ知識。Microsoft Excelのうるう年が間違っていて、実際にはうるう年ではないのに1900年2月29日があるって知っていますか? そのため、Excelの日付の値(シリアル値)が1900年3月1日以降、1日分多くなっています。「えっ、じゃあExcelで日付の計算をすると、1日ずれてしまうの?」と心配になった方、ご安心ください。大丈夫な理由と、なぜ1日ずれているのかを解説します。
Microsoft Excelは、1900年を「うるう年」として誤って扱っているのを知っていますか?
うるう年は、地球の公転周期は約365.2422日と日単位では割り切れないので、それを補正するために西暦が4で割り切れる年はうるう年として、「2月29日」を挿入するというのが基本的なルールです。でも、4年に1回の補正だと、また少しずつずれてしまうので、100で割り切れて、400で割り切れない年は平年(「2月29日」を挿入しない)、400で割り切れる年はうるう年となります。
つまり1900年は4で割り切れ、100でも割り切れるけど、400では割り切れないので、実はうるう年ではない平年です。ちなみに2000年は、4でも100でも400でも割り切れるので、うるう年です。
では、なぜExcelは、1900年をうるう年として誤って扱っているでしょう。これは、Microsoftが誤ったというよりも、歴史的ないきさつからあえて1900年をうるう年として扱っているのです。
この問題の起源は、Excelよりも前に普及していた「Lotus 1-2-3」という表計算ソフトウェアにあります。Lotus 1-2-3は、日付をシリアル値(1900年1月1日を「1」とする連番)で管理していました。しかし、当時の開発者はうるう年の計算ルールを誤って解釈し、1900年をうるう年としてしまったのです。
当時、Lotus 1-2-3は広く普及していたため、後発となるExcelはLotus 1-2-3との互換性を確保する必要がありました。そうしないと、Lotus 1-2-3で作成した表をExcelで読み込むと、日付がずれてしまうという問題が生じたからです。そのため、1900年をうるう年とする仕様(?)も修正せず、そのままExcelも1900年をうるう年とする仕様になりました。
Excelでは、1900年がうるう年として扱われていることから、1900年3月1日以降の日付(シリアル値)が、実際のカレンダーと1日ずれています。例えば、Excelでは1900年2月29日が存在すると認識していることから、1900年3月1日のシリアル値は「61」となっています。しかし、実際には1900年2月29日は存在しないため、本来1900年3月1日のシリアル値は「60」であるべきです。
Excelでセルに「1900年2月29日」と入力して、表示形式を「日付」から「数値」に変えてシリアル値を確認すると、「60」と表示されるはずです。ちなみにうるう年ではない平年に対して、2月29日を「2025/2/29」と入力すると、表示形式は「数値」でも「2025/2/29」ままシリアル値は表示されません(シリアル値が存在しないので当然ですが)。
こう聞くと、Excelで日付を計算すると、1日ずれてしまうように思うかもしれません。でも、シリアル値を365日や366日で割って、といったようにこの値から計算式を使って日付に換算することは非常にまれなことなので、シリアル値がずれていてもほとんど問題がありません。
問題が生じるのは、1900年3月1日以前の日付との間の日数などを計算するときや、1900年1月1日から1900年2月28日までの曜日を計算するときだけです。例えば、1900年1月1日から2025年12月31日までの日数は、Google検索によると「4万6020日」になります。一方、Excelで計算すると「4万6021日」と1日多くなってしまいます。また、1900年1月1日から1900年2月28日までの曜日は、1日分ずれています。1900年1月1日の曜日は、本来は「月曜日」ですが、Excelで曜日を出力すると「日曜日」になってしまいます。
この仕様(?)は、Excelが互換性を重視した結果生まれたものです。いまだに「誤った仕様」を引きずっているわけです。このようにアプリケーションの中には互換性を維持するために、本来は誤った仕様を長く維持しているものもあります。Excelも、いまさら1900年を平年という正しい状態に戻すことはできそうもありません。
Copyright© Digital Advantage Corp. All Rights Reserved.