エクセルのシリアル値について説明します。
シリアル値について
シリアル値とは1900年1月1日を1として一日に1増える数字です。
時刻もこの延長で扱われ正午は24時間のうちのちょうど半分なので0.5となります。
つまり、1時間は1/24≒0.041666667となり1分は1/(24×60)≒0.000694444となり1秒は1/(24×60×60)≒0.0000115741となります。
エクセルでは0や負の数は扱いません。なので、1900年1月1日より前は日付として扱えません。
1900年2月29日問題
実はエクセルの日時にはバグが存在するのです。
エクセルでは1900年をうるう年とし2月29日が存在します。
しかし、実際には1900年はうるう年ではないため2月29日は存在しません。
これにより1900年2月28日以前のデータがずれています。
Microsoftはこのことを把握できていないのか。あるいは把握できているがたった二ヶ月のことなので放置しているのか不明です。
うるう年について
西暦が4で割り切れる年はうるう年です。(4桁で計算しなくても下二桁だけ計算すればよい。これは100は4で割り切れるため起こる現象なのです。)
しかし西暦で100で割り切れる年はうるう年ではありません。1900年がうるう年ではないのはこのためです。
しかし、400で割り切れる年はうるう年になります。
このため西暦2000年のうるう年は400年に一度の珍しいうるう年だったのです。(でも、分かりにくいですよね。)
他の表計算ソフトでは
すべての表計算ソフトを調べる余裕はありませんがApache OpenOffice Calcとgoogleスプレッドシートのいずれもシリアル値に0や負の数を扱い1900年2月29日は存在しない日付となっています。
エクセルで上の表をコピーします。
上図のようになります。
1900年2月28日以前が一日ずれてしまいます。
同様にスプレッドシートにコピーするとこうなります。
見た目はエクセルと変わりありません。
しかし、表示形式を数値にすると上図のようになりエクセルと違うことがわかります。
スプレッドシートで上のようなデータを使ったとします。
この表示形式を日付にすると上のようになります。
コメント