- PCソフトウェア
- 2019年6月5日
「数値」と「文字列」の違いとは?セルへの入力でエクセルの基本特性を考えてみましょう。
エクセルの基本特性を知る エクセルにおけるサポート対応対応で、新元号令和の表示に……
先日のエクセルの「令和元年」対応の記事の中で、1900年1月1日を1と考え日付を連続した数値として、処理を行う「シリアル値」というものがあると書いていました。
マイクロソフトのサポートページでも、Excel の1900年を基準とした・・・と以下の様に概要説明があります。
1900 年を基準とした日付方式
1900 年を基準とした日付方式では、サポートされる最初の日付は 1900 年 1 月 1 日です。日付を入力すると、その日付は 1900 年 1 月 1 日からの経過日数を表すシリアル値に変換されます。たとえば、1998 年 7 月 5 日と入力すると、その日付は Excel によってシリアル値 35981 に変換されます。
出典:Microsoft サポート
URL:https://support.microsoft.com/ja-jp/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel
シリアル値の事を書きながら、エクセルで日付の計算処理を行う上でいくつか問題点があることを認識しつつも書いていた部分があり、情報補足としてここに記載します。
エクセルは日付形式でデータを扱うことができるように、シリアル値というものを使っているという点は間違いありません。
しかし、エクセルが使用しているシリアル値はうるう年ではない1900年をうるう年としてしまっていて、本来なら存在しない1900年2月29日があるようにしてしまったことで、日付けの処理において 1900年1月1日から1900年2月29日の曜日計算にずれが発生するという問題があるのです。1900年3月1日からの曜日は正しく処理がされます。
「うるう年」は西暦年号が4で割り切れる年をうるう年としていますが、もうひとつ条件があり、100で割り切れて400で割り切れない年は除外するというものがあります。
この条件を1900年に当てはめると、1900は100で割り切れますが400では割り切れないのでうるう年ではないという事になります。
1900年はうるう年ではないので1900年2月29日は存在してはいけないのですが、エクセルで1900年1月1日,10日,20日, 30日と日付を2月、3月まで入力して、日付け形式を設定してみます。
曜日の列を追加して、A列と同じ日付を入力します。
曜日で表示するために、エクセルの表示形式を【 aaaa 】と変更します。
書式設定を行うと1900年1月1日が日曜日、1900年1月2日が火曜日・・・1900年2月29日が水曜日、1900年3月1日が木曜日と表示されます。
曜日計算ができるカシオの計算サイトがあり、そこで1900年1月1日他の曜日を求めることができるのでやってみます。
keisanサイトで、それぞれの日付の曜日を求めた結果をキャプチャーしました。
結果は1900年1月1日は月曜日、1900年2月28日は水曜日、1900年2月29日Error、1900年3月1日木曜日となり、3月1日のみ正しいことがわかるでしょうか。1900年3月1日以降の日付が気になる方は計算サイトで試してみてください。
この原因はエクセルが世に出る頃使用されていた【ロータス123】という表計算ソフトウェアがあったのですが、そのソフトウェアでは1900年をうるう年として処理を行うようになっていました。そのソフトと互換性を持たせるためにエクセルも1900年をうるう年にしてしまった・・・、という理由で存在しないはずの1900年2月29日が存在してしまったというわけです。
どうして?なぜ?と言っても初めからそうなってしまっていたので、いまさらどうしようもないと言わざるを得ないのですが、1900年3月1日より前の日付と1900年3月1日以降の日付を使って計算を行う場合には1日ずれが生じることがあるという事を知ったうえで処理を行うよう注意してください。
とはいえ、1900年1月1日~1900年2月28日までの日付と現在の日付を使って計算をするといったことは、そんなしょっちゅう行うことはないと思います。
今回は令和の記事を書いたあとに『シリアル値ってナニ?』と尋ねられて説明することなったので、エクセルのシリアル値について掘り下げ、1900年をうるう年として処理を行ってしまったという仕様について書いてみました。
シリアル値についてはまだまだ内容盛りだくさんの話題となってしまいそうなので、また別の記事で取り上げたいと思います。