
結論:Excelは「1900年はうるう年」だと思っている
うるう年のルールは「4で割れる年。ただし100で割れる年は除く。ただし400で割れる年は入れる」です。1900年は100で割れて400で割れないので、うるう年ではありません。2月は28日までです。
ところがExcelは、1900年2月29日を「ある日」として扱います。ためしてみるのは簡単です。空いているセルに 60 と入力して、そのセルの表示形式を「日付」に変えてみてください。1900/2/29 と表示されます。
| セルに入れる数字 | 日付にすると | ほんとうのカレンダー |
|---|---|---|
| 59 | 1900/2/28 | 1900/2/28 |
| 60 | 1900/2/29 | 存在しない |
| 61 | 1900/3/1 | 1900/3/1 |
これはMicrosoft自身が公式のサポート文書で「Excelは1900年を誤ってうるう年とみなしています」と認めている、れっきとした仕様です。
そもそもExcelの日付は「番号」でできている
なぜセルに60と入れると日付になるのでしょう。Excelの中では、日付は数字で管理されています。1900年1月1日を1番として、1日進むごとに1ずつ増える通し番号です。2026年9月2日なら46267番。日付の引き算がふつうの計算でできるのは、この仕組みのおかげです。
そして通し番号の60番が、本来なら1900年3月1日になるはずのところに、存在しない「2月29日」がはさまっている。だから60番以降の日付はすべて、ほんとうのカレンダーより1日ぶん後ろにずれた番号を持っています。とはいえ、番号がずれていても、表示される日付は1900年3月1日以降はすべて正しいので、ふだん使っていて気づくことはありません。

犯人は、Excelより前に売れていた別のソフト
Microsoftの文書は、原因をはっきり書いています。Excelが登場する前、1980年代の表計算ソフトの王様はLotus 1-2-3(ロータス・ワン・ツー・スリー)というソフトでした。このLotus 1-2-3が、最初から1900年をうるう年として扱っていたのです。
あとから出てきたMicrosoftのMultiplan、そしてExcelは、Lotus 1-2-3で作られた表をそのまま読みこめることが何より大事でした。日付の通し番号がLotusと1つでもずれていれば、読みこんだ表の日付がぜんぶ1日ずれてしまいます。そこでExcelは、あえて同じ「1900年はうるう年」というルールを採用しました。互換性のために、まちがいをわざと引きつぐという判断です。
この経緯には、当時Excelの開発チームにいたジョエル・スポルスキーさんが2006年に書いた有名なブログ記事があります。1992年、彼はこの2月29日に気づいて先輩に質問し、「Lotus 1-2-3の表を読みこめないといけないから、そうするしかなかった」と説明されたそうです。その先輩によれば、Lotus側にも事情があって、1900年を無視すれば「年の下2ビットがゼロかどうか」を見るだけでうるう年が判定できる、つまり計算がとても軽くすむ、という理由だったとのことです。1980年代の非力なパソコンにとっては、それが大事だったのでしょう。
なぜ今も直さないのか
「わかっているなら直せばいいのに」と思いますよね。Microsoftの文書には、直さない理由も書かれています。技術的には直せるけれど、直すことによる損のほうが大きい、というのです。
- 世界中のExcelファイルにある日付が、ほぼすべて1日ずれてしまう。日付を使った計算式を直す手間は計り知れない
- WEEKDAY(曜日を返す関数)などが違う値を返すようになり、いま動いている表が壊れる
- 日付の通し番号でつながっている他のソフトとの互換性が崩れる
では、この仕様で実際に困ることはあるのでしょうか。影響が出るのは1900年3月1日より前の日付だけです。たとえば、1900年1月1日はほんとうは月曜日ですが、ExcelのWEEKDAY関数は日曜日だと答えます。ただ、そんな昔の日付を表計算で扱う人はほとんどいないので、実害はごくまれ、というのがMicrosoftの立場です。ちなみに1900年以外のうるう年は、2100年(うるう年ではない)も含めて、Excelはすべて正しく扱います。

ちなみに余談
Excelには実は、もう一つの数え方があります。「1904年日付システム」といって、1904年1月1日を0番として数える方式です。昔のMac版Excelでは、こちらが標準でした。1904年から数えれば、1900年の2月なんて最初から範囲の外。うるう年問題はそもそも起きません。いまはWindows版もMac版も1900年方式が標準ですが、設定(ファイル→オプション→詳細設定)に「1904年日付システムを使用する」という項目が今も残っています。二つの方式の差はちょうど1,462日。Macで作った古いファイルの日付が4年ほどずれて見えたら、この設定のちがいです。
もう一つ。Googleスプレッドシートは、通し番号の0番を1899年12月30日にしています。1900年1月1日ではなく、その2日前です。こうすると、1900年をうるう年にしなくても、1900年3月1日以降の番号がExcelとぴったり同じになります。Googleの公式ドキュメントにも「この方法で、1900年を正しく非うるう年として扱える」と書かれています。無料の表計算ソフトLibreOffice Calcも、標準の0番は同じ1899年12月30日です。Excelのまちがいを引きつがず、でも番号は合わせる。後から来たソフトの、なかなかうまい解決です。
Excelで開いたCSVの文字がおかしくなるときの話は、その文字化け、直るかも?で書きました。Excelまわりでもう一つ、と思ったらどうぞ。
まとめ
- Excelは1900年をうるう年として扱っていて、存在しない「1900年2月29日」がある(セルに60と入れて日付表示にすると見える)
- 原因は1980年代の表計算ソフトLotus 1-2-3との互換性。まちがいをわざと引きついだ
- 直すと世界中のファイルの日付が1日ずれるので、Microsoftは直さないと決めている
- 影響があるのは1900年3月1日より前の日付だけ。ふだんの使い方では困らない
- Googleスプレッドシートは0番を1899年12月30日にして、同じ番号のまま問題を避けている
毎日使っている道具の中に、40年前の決断がそのまま残っている。Excelの日付を見るとき、ちょっとだけ思い出してみてください。

出典:Microsoft Learn – Excel incorrectly assumes that the year 1900 is a leap year/Microsoft Support – Date systems in Excel/Joel on Software – My First BillG Review(2006)/Google Sheets API – DateTimeRenderOption/LibreOffice Calc Guide 24.2 – Setting up and Customizing


