Excelの“うるう年バグ”は仕様だった? 1900年2月29日の謎IT界隈のムダ知識

知っていると何かのときに役に立つかもしれないITに関するマメ知識。Microsoft Excelのうるう年が間違っていて、実際にはうるう年ではないのに1900年2月29日があるって知っていますか? そのため、Excelの日付の値(シリアル値)が1900年3月1日以降、1日分多くなっています。「えっ、じゃあExcelで日付の計算をすると、1日ずれてしまうの?」と心配になった方、ご安心ください。大丈夫な理由と、なぜ1日ずれているのかを解説します。

» 2025年09月04日 05時00分 公開
[小林章彦デジタルアドバンテージ]
Excelの日付の値が1日ずれてる? Excelの日付の値が1日ずれてる?
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年をうるう年とした理由

 では、なぜ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のシリアル値は1日分多い?

 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には1900年2月29日が存在する Excelには1900年2月29日が存在する
Excelには、本来存在しないはずの1900年2月29日が存在し、シリアル値として「60」が割り当てられています。そのため、1900年3月1日のシリアル値は「1」多い、「61」となっています。通常、平年の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で曜日を出力すると「日曜日」になってしまいます。

Google検索で1900年1月1日からの日数を検索してみた Google検索で1900年1月1日からの日数を検索してみた
Google検索を使って1900年1月1日から2025年12月31日までの日数を検索してみました。その結果、「4万6020日」となりました。

Excelで1900年1月1日からの日数を計算してみた Excelで1900年1月1日からの日数を計算してみた
Excelで1900年1月1日から2025年12月31日までの日数を計算してみました。1900年2月29日がカウントされるため、Google検索の結果とは異なり「4万6021日」と1日多くなってしまいました。

 この仕様(?)は、Excelが互換性を重視した結果生まれたものです。いまだに「誤った仕様」を引きずっているわけです。このようにアプリケーションの中には互換性を維持するために、本来は誤った仕様を長く維持しているものもあります。Excelも、いまさら1900年を平年という正しい状態に戻すことはできそうもありません。

Copyright© Digital Advantage Corp. All Rights Reserved.

アイティメディアからのお知らせ

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。