1900年のExcel平日が間違っているのはなぜですか?


27

この質問はの観察に基づいているAdamV彼の答え私はExcelのセルに曜日名を取得するにはどうすればよいですか?

A1の値が2009-08-01の場合:

  • =WEEKDAY(A1) 取得します 7
  • =TEXT(7, "dddd") 取得します Saturday
  • =TEXT(7,"dddd, yyyy-mm-dd") 取得します Saturday, 1900-01-07
  • =TEXT(1,"dddd, yyyy-mm-dd") 取得します Sunday, 1900-01-01
  • =TEXT("1900-01-01","dddd, yyyy-mm-dd") また取得します Sunday, 1900-01-01

最後の2つは間違っています。1900年1月1日は実際には月曜日です。
さまざまなソースがそれを確認しているようです:

私は何が欠けていますか?Excelがこれを間違っているのはなぜですか?


1
この質問のおかげで、1/1/1900は日曜日ではないことを明確にするために、以前の答えを少し言い換えましたが、Excelはそうだと考えています。不正確さは、日付のように見えるようにフォーマットされたテキストを生成するための基準として平日番号を使用することは欠陥があり、不要であるという以前の回答の内容を変更しません。
-AdamV

回答:


40

Microsoft KB 214058に記載されているとおり

1900年3月1日より前の曜日がExcelで正しくない

詳しくは

Microsoft Excelの日付システムが最初に作成されたとき、他のスプレッドシートプログラムで使用されている日付システムと完全に互換性があるように設計されていました。

ただし、この日付システムでは、1900年はincorrectly年として誤って解釈されます。1900年には2月29日(「うるう日」)がないため、1900年3月1日(「うるう日」の後の日)より前の日付の曜日は正しく計算されません。

「その他のスプレッドシートプログラム」とは、当時非常に人気があったLotus 1-2-3を指し、1900年がうるう年であると誤って想定されていました。これについては、KB 214326でさらに詳しく説明しています。

Excel 2000は、1900年がうるう年であると誤って想定しています

詳しくは

ロータス1-2-3が最初にリリースされたとき、プログラムは実際にはyear年ではなかったにもかかわらず、1900年がap年であると想定していました。これにより、プログラムがうるう年を簡単に処理できるようになり、Lotus 1-2-3のほとんどすべての日付計算に悪影響を与えませんでした。

Microsoft MultiplanとMicrosoft Excelがリリースされたとき、彼らは1900年がle年であると仮定しました。この前提により、Microsoft MultiplanとMicrosoft Excelは、Lotus 1-2-3で使用されているのと同じシリアル日付システムを使用でき、Lotus 1-2-3との互換性が向上しました。1900年をうるう年として扱うことで、ユーザーがワークシートをあるプログラムから別のプログラムに簡単に移動できるようになりました。

Microsoft Excelの現在のバージョンが1900年をle年と見なさないように、この動作を修正することは技術的に可能ですが、そうすることの欠点は利点を上回ります。

この動作を修正すると、次のような多くの問題が発生します。

  • 現在のMicrosoft Excelワークシートおよびその他のドキュメントのほとんどすべての日付は1日減ります。特に日付を使用する数式では、このシフトを修正するにはかなりの時間と労力がかかります。
  • WEEKDAY関数などの一部の関数は、異なる値を返します。これにより、ワークシートの数式が正しく機能しない場合があります。
  • この動作を修正すると、Microsoft Excelと日付を使用する他のプログラム間のシリアル日付の互換性が失われます。

動作が修正されないままの場合、発生する問題は1つだけです。

  • WEEKDAY関数は、1900年3月1日より前の日付に対して誤った値を返します。ほとんどのユーザーは1900年3月1日より前の日付を使用しないため、この問題はまれです。

10
Stack Exchange独自のJoel Spolskyの関連記事は次のとおり
matt

5
も参照してください。多くのプログラマーは、日付/時刻の操作は簡単だと誤って想定しています:)
BlueRaja-ダニーPflughoeft

3
歴史的なnitpicK:1-2-3が「非常に人気がある」と言うとき、それはかつて支配的なスプレッドシートだったことを意味します。
アイザックラビノビッチ

12

ジョエル自身が説明した理由は次のとおりです。私の最初のBillGレビュー

Basicは、1900年1月1日ではなく1899年12月31日をエポックとして使用しますが、何らかの理由で、Excelの日付はBasicと同じでした。

え?

その理由を思い出すのに十分な年齢のExcel開発者を探しに行きました。エド・フライスは答えを知っているようでした。

「ああ」と彼は私に言った。「1900年2月28日をチェックしてください。」

「59です」と私は言った。

「3月1日を試してみてください。」

「61だ!」

「60に何が起こったのですか?」エドは尋ねた。

「1900年2月29日。le年でした。4で割り切れます!」

「良い推測ですが、葉巻はありません」とエドは言い、しばらく不思議に思った。

おっとっと。私はいくつかの研究をしました。100で割り切れる年は、400で割り切れる場合を除き、うるう年ではありません。

1900年はle年ではありませんでした。

「これはExcelのバグです!」私は叫んだ。

「まあ、そうではない」とエドは言った。「ロータス123ワークシートをインポートできるようにする必要があるため、そのようにする必要がありました。」

「それは、Lotus 123のバグですか?」

「ええ、しかしおそらく意図的なものです。ロータスは640Kに収まらなければなりませんでした。それは多くのメモリではありません。1900を無視すると、右端の2ビットがロータスの人たちは、おそらく過去2か月の間にそれが間違っていても問題ないと考えていました。


1
@JeroenWiertPluimers:実際、このリンクに関する私の回答はモデレーターによって削除されたため、回答を拡大することにしました。
ジョルジ

2

これに対する1つの解決策は、年に400年を追加し、次の式= WEEKDAY(DATE(A4 + 400、B4、C4)、1)のように平日を計算することです。したがって、A4 = 1834 B4 = 12 C4 = 14これは、1(日曜日)を返します。これは、2234年12月14日と同じです。これは、グレゴリオ暦の変更後の年である1753年より前の日付では機能しなくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.