日刊☆こよみのページ スクラップブック(PV , since 2008/7/8)

■エクセルの1900年は閏年
 今回も始まりは「メール」からです。
 ただし今回の始まりメールはこよみのページ宛てではなく私が時々プログラ
 ム作りでお手伝いしている占い(算命学)系のサイトに届いたものでした。
 そちらに届いた質問メールの内容について、そのサイトの運営者の方から相
 談を受けたというものです。

 東洋の占いには暦の上に現れる年、月、日の干支(天干地支などともいいま
 す)の様々な組み合わせから占うものが多く、算命学もそうした占いの一つ
 です。そんなわけで占いを専門とするわけではない私でも、その計算の仕組
 みは理解しやすいです。何せほとんどが「暦の話」ですから。

 そんなわけで「ひょんなこと」から算命学のWeb サイト作りをお手伝いする
 ことになったわけです(そちらのサイトに、協力者として「かわうそ@暦」
 と書かれているのでここで書いても大丈夫でしょう)。

 さて、そんな関係のある占いサイトに、「過去の計算が違っていないか」と
 いうメールが届いたのでした。
 届いたメールの内容はというと

  「1900年の2月が28日までしかないと計算されているので
   それより前の計算が全てズレてしまう」

 というものでした。
 これは大変だ! なぜこんな間違いが・・・?
 あれれ、1900年の2月は28日までで翌日は3月1日。それでいいんじゃない?

 日刊☆こよみのページの読者の皆さんならご承知の通り、1900年は平年です
 ので2月は28日までです。ということで、計算は違っていないようです(も
 ちろん念のため、そのサイトで1900年前後の計算を行ってみて問題ないこと
 を確認はしました)。

 よかったよかった・・・となると、気になるのはなぜ問い合わせメールがや
 ってきたのかということ。メールの内容からすると送り主は1900年の2月が
 29日まであると何らかの根拠から信じているらしい。
 なんだろう??

  あっ、あれか?

 それで思いついたのがマイクロソフト、エクセルの面白い仕様でした。

◇エクセルの1900年2月は29日ある?
 皆さんご存じでしたか、マイクロソフトのエクセルで1900年の日付を表示さ
 せると、2月が29日まであるのです。

  そんな馬鹿な

 と、かわうその言を疑う方はお手元にあるエクセルでお試しください(きっ
 とありますよね、エクセル)。エクセルのセルに年月日を入れて、そのセル
 の値に対して日数を加減算することが出来ます。例えば

  2023/2/28 + 1 → 2023/3/1

 となります。これに対して問題の1900年でこれを行うと

  1900/2/28 + 1 → 1900/2/29

 となります。うむむ。
 もちろん、現在広く使われているグレゴリオ暦(日本の新暦もこれ)の仕組
 みから考えると1900年の例のエクセルの表示は間違いなのですが、マイクロ
 ソフト社はこの年は閏年ではないとは知りつつも、この年を閏年と見なす
 「仕様」としています。

 もしかしたら、マイクロソフトは今でもユリウス暦を使っているのか?
 という疑問も浮かんでしまいますが、そうでもないようです。上記の実験を
 2100年で試してみるとわかります。

  2100/2/28 + 1 → 2100/3/1

 2100年はユリウス暦では閏年なので、もしマイクロソフトが

  ユリウス暦最高!

 というのであれば、この年も上記の式の計算結果は 2100/2/29 となるはず
 ですが、ちゃんと 2100/3/1 となりますから、ユリウス暦信奉者説は否定
 できますね。

 このおかしな仕様はエクセル誕生時から既にありました。今では表計算ソフ
 トと言えばエクセル以外が思う浮かばないくらいスタンダードなソフトウェ
 アとなったエクセルですが、これが生まれたころは「ロータス1-2-3」
 という強力な先行者がいたのでした。

 後発ソフトのつらいところは先行のメジャーソフトがある場合、先行するソ
 フトとの互換性を保たないと使ってもらえないということがあります。
 でないと、ソフトの買い替えなのどの際に、選択肢に入れてもらえませんか
 ら。そしてこのおかしな1900年の日付計算は、先行したロータス1-2-3
 との互換性を保つための「仕様」だったのです。

 ロータス1-2-3からすると、これは仕様ではなくてバグだったのでしょ
 う。でもバグがあってもそれが広く行きわたってしまうと、下手に直せなく
 なってしまいます。

 後発のエクセルからすると、先行者のバグを「仕様」として取り込むしかな
 かったというわけです。

◇めでたく解決
 ここで、問い合わせメールに戻ります。
 問い合わせ年がピンポイントで「1900年」というエクセルの特異な年であっ
 たことから、メールの送り主はエクセルのこの仕様を知らずにエクセルで日
 付を計算したのかなと推測して、件の算命学サイト運営者を通じてこうした
 説明を送ったところめでたく問題解決でした。
 よかった、疑い(?)が晴れて。

 ちなみにですが、エクセルのこの不思議な仕様と関係すると思われる不思議
 なオプションがいまもエクセルには残っています。最新版エクセル(2023年
 現在)でも

  ファイル → その他 → オプション → 詳細設定

 と進んだところに出てくる沢山の設定の中に

  1904年から計算する

 というオプションスイッチが登場します(通常は、無効になっている)。
 1900年のこの不思議な閏年問題を回避するために、年月日の計算は1904年以
 降しか使えなくするというオプションスイッチなんでしょう。

 もっとも、このオプションを有効にしないでもエクセルでの年月日計算は、
 1900年以降しか使えないので、オプションスイッチがonでもoffでも、4年分
 しか使用範囲は変わらないのですがね。

 本日は、自分の身に降りかかった(?)エクセルの1900年の2月29日問題に
 まつわる暦のこぼれ話でした。

日刊☆こよみのページ スクラップブック