Excelの仕様についてのネタで、Excel 2003のヘルプからの抜粋をご紹介しました。
この中で「計算で使用できる最も古い日付」が「1900年1月1日」となっているが、「1899年12月31日」ではないかとご指摘をいただきました。
その根拠は、OpenOfficeの「Microsoft Excel File Format」というドキュメントに、「0 = Base date is 1899-Dec-31」という記述があるためのようです。
実際のところは試してみればすぐわかります。
Excelを起動して
A1セルに「1900/1/1」
B1セルに「1899/12/31」
と入力してみてください。
次にそれぞれのセルを参照して計算をさせてみましょう。
A2セルに「=A1+1」
B2セルに「=B1+1」
と入力してみてください。
「1900/1/1」を使ったA2セルは計算が行われ「1900/1/2」と表示されますが、「1899/12/31」を使ったB2セルでは計算はできず#VALUE!エラーが発生します。
また、A1セルとB1セルでシリアル値を表示させてみてください。
A1セルは「1900/1/1」のシリアル値「1」が表示されますが、B1セルは「1899/12/31」という文字列のままです。
以上の操作から、「計算で使用できる最も古い日付」が「1899年12月31日」ということはありません。「1899/12/31」では計算できないわけですから。
じゃあ「1900年1月1日」が「計算で使用できる最も古い日付」なのかというと、実はこれも違います、厳密なことを言えば。
先ほどのつづきでA3セルに「=A1-1」と入力して計算をさせてみてください。
「0」と表示されるはずです。
次にA3セルの表示形式を日付にしてみましょう。
「1900/1/0」と表示されます。
一般的にシリアル値については「1900年1月1日」を「1」、「1900年1月2日」を「2」として以後日にちが増えるごとに「1」加算されるといった説明がされていますが、厳密なスタートは「0」でExcelはそれを「1900年1月0日」という変な日付で扱っているのです。
Excelのヘルプ作成者に確認するしかないのでしょうが、「1900年1月0日」というのは「日付」という考えからすると確かに変なので、「計算で使用できる最も古い日付」としては「1900年1月1日」として記載してあるのかな、と推測しています。
ところで、この日付として変な「1900年1月0日」ですが、実は意識せずに使っていることは少なくありません。
例えば勤怠管理をするために出社時刻と退社時刻を入力して、何時間何分働いたかを引き算で計算するということはよく行われています。その際入社時刻に「9:00」退社時刻に「17:00」といった入力をするわけですが、この「9:00」「17:00」を日付つきの表示形式にしてみてください。「1900/1/0 9:00」「1900/1/0 17:00」といった日付が見えて来ます。
つまり勤務時間を計算する「17時00分」引く「9時00分」は、実際には「1900年1月0日 17時00分」引く「1900年1月0日 9時00分」なのです。
Excelでシリアル値「0」を、なぜ「1899年12月31日」にせず「1900年1月0日」としたのかは、Excelの設計者に確認しないとわかりませんが、
・昔は現在ほどPCのリソースが豊富ではなかったこと
・そもそもExcelがMacintosh上で動く表計算ソフトだったこと
・Lotus 1-2-3のユーザーを奪い取る使命があったこと
などが関係しているのかなと勝手に想像しています。真剣に探せばどこかに信頼のおける文書があるとは思うのですが、全体最適を目指すためにちょっと仕様を汚すことは、少なからずあることですからこの程度の推測で納得しておきたいと思います。
OpenOfficeの方は過去のしがらみにとらわれることなく、シリアル値「1」=「1900年1月1日」の前日なんだから、「0」を「1900-Jan-0」という実在しない日にはしないで「1899-Dec-31」とすなおに扱っているだろうなと想像しています。
- Newer:IMEツールバーのボタン表示変更
- Older:Yahoo! SEARCH(ベータ)
Home » Excel(エクセル)の関数・数式の使い方 » 日付の処理・計算 » 計算で使用できる最も古い日付−1900年1月0日