
この質問は、アダムVで彼の答えの上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
Microsoftの説明によるとKB 214058:
1900 年 3 月 1 日より前の曜日は Excel では正しくありません
詳しくは
Microsoft Excel の日付システムは、当初、他のスプレッドシート プログラムで使用される日付システムと完全に互換性があるように設計されました。
しかし、この日付システムでは、1900 年は誤ってうるう年として解釈されます。1900 年には 2 月 29 日 (「うるう日」) がないため、1900 年 3 月 1 日 (「うるう日」の翌日) より前の日付の曜日は正しく計算されません。
「その他のスプレッドシートプログラム」とは、ロータス1-2-3当時かなり人気があったこの理論は、1900年が閏年であると誤って想定していました。これについては、KB214326 翻訳:
Excel 2000 は 1900 年を閏年と誤って想定しています
詳しくは
Lotus 1-2-3 が最初にリリースされたとき、実際には 1900 年はうるう年ではなかったにもかかわらず、プログラムは 1900 年をうるう年と想定していました。これにより、プログラムがうるう年を処理しやすくなり、Lotus 1-2-3 でのほとんどすべての日付計算に悪影響がありませんでした。
Microsoft Multiplan と Microsoft Excel がリリースされたとき、1900 年は閏年であると想定されていました。この想定により、Microsoft Multiplan と Microsoft Excel は、Lotus 1-2-3 で使用されているのと同じシリアル日付システムを使用でき、Lotus 1-2-3 との互換性が向上しました。1900 年を閏年として扱うことで、ユーザーがワークシートをあるプログラムから別のプログラムに移動することも容易になりました。
現在のバージョンの Microsoft Excel が 1900 年を閏年と見なさないようにこの動作を修正することは技術的には可能ですが、そうすることで生じるデメリットがメリットを上回ります。
この動作を修正すると、次のような多くの問題が発生します。
- 現在の Microsoft Excel ワークシートやその他のドキュメント内のほぼすべての日付が 1 日減少します。このずれを修正するには、特に日付を使用する数式では、かなりの時間と労力がかかります。
- WEEKDAY 関数などの一部の関数は異なる値を返すため、ワークシート内の数式が正しく動作しない可能性があります。
- この動作を修正すると、Microsoft Excel と日付を使用する他のプログラム間のシリアル日付の互換性が失われます。
動作が修正されないままの場合、次の 1 つの問題が発生します。
- WEEKDAY 関数は、1900 年 3 月 1 日より前の日付に対して誤った値を返します。ほとんどのユーザーは 1900 年 3 月 1 日より前の日付を使用しないため、この問題はまれにしか発生しません。
答え2
ジョエル自身が説明した理由は次のとおりです。私の最初のBillGレビュー
Basic では、1900 年 1 月 1 日ではなく 1899 年 12 月 31 日をエポックとして使用しますが、何らかの理由で、今日の日付は Excel でも Basic でも同じでした。
はぁ?
私はその理由を覚えているほどの年齢の Excel 開発者を探しに行きました。Ed Fries は答えを知っているようでした。
「ああ」と彼は私に言った。「1900年2月28日を調べてください。」
「59です」と私は言った。
「では3月1日を試してみましょう。」
「61だよ!」
「60はどうなった?」とエドは尋ねた。
「2月29日。1900年は閏年でした!4で割り切れます!」
「いい推測だが、だめだ」とエドは言い、私はしばらく考え込んでしまった。
おっと。調べてみたところ、100 で割り切れる年は、400 でも割り切れない限り、うるう年ではないようです。
1900年は閏年ではありませんでした。
「Excel のバグだ!」と私は叫びました。
「まあ、そうでもないよ」とエドは言いました。「Lotus 123 ワークシートをインポートする必要があるので、そのようにする必要がありました。」
「それで、それはロータス123のバグですか?」
「ええ、でもおそらく意図的なのでしょう。ロータスは 640K に収めなければなりませんでした。メモリはそれほど多くありません。1900 年を無視すれば、右端の 2 ビットがゼロかどうかを調べるだけで、その年が閏年かどうかを判断できます。これは非常に高速で簡単です。ロータスの人たちは、はるか昔の 2 か月については間違っていても問題ないと考えていたのでしょう。
答え3
この問題の解決方法の 1 つは、年に 400 年を追加して、次の式で曜日を計算することです。
=WEEKDAY(DATE(A4+400,B4,C4),1)
したがって、次の変数
A4 = 1834
B4 = 12
C4 = 14
は (日曜日)を返します1
。これは 2234 年 12 月 14 日と同じです。これは、グレゴリオ暦への変更後の年の より
前の日付では機能しなくなります。1753