日付データを定義しているシリアル値について完全理解する
エクセルの日付データについて、ここでは深く学習していきます。 [シリアル値] という値が存在しますが、その話に入る前に、うるう年を正確に理解しておきましょう。
見出しを3つに分けました。
- グレゴリオ暦について
- うるう年について
- エクセルのシリアル値について
少し長いので、お時間のある時にじっくり学習してくださいね。
グレゴリオ暦について
まず、グレゴリオ暦(グレゴリオれき)は、暦(こよみ)の一つです。
現在、世界の多くの国々で使用されている太陽暦のことを指します。1582年にローマ教皇グレゴリウス13世によって制定されたため、この名がついています。
そんな昔から定義されているなんて、驚きですよね。それまで用いられていたユリウス暦と比較して、年の長さをより正確に太陽年に近づけるため、この暦が導入されました。
ユリウス暦では、1年を365.25日として計算していましたが、実際の太陽年はそれよりも短いことに人類は気づきます。この結果、数世紀の間に季節と暦がずれてきてしまう問題が生じてしまいました。
特にキリスト教の復活祭の日付が、春分の後に固定されなくなる問題が深刻だったのです。
グレゴリオ暦の導入当初、1582年10月4日の翌日を10月15日として、10日間スキップしました。これにより、春分の日が正確に3月21日に設定されました。
その調整は、以下の通りです。
グレゴリオ暦では、4で割り切れる年はうるう年としますが、100で割り切れる年はうるう年とはしません。ただし、400で割り切れる年は再びうるう年とする、という新しい規則が追加されました。
参考サイト:https://www.y-history.net/appendix/wh0103-169_1.html
うるう年について
うるう年を、箇条書きで整理してみましょう。
- 4で割り切れる年は、うるう年。
- ただし、100で割り切れる年は、うるう年ではない。
- しかし、400で割り切れる年は、うるう年。
これが、うるう年のルールです。プログラミングの練習の際、必ず出てくる題材でもあります。
激レアな年、2000年という記念すべき1年は、私が19歳のときに過ごしましたが、ノストラダムスの大予言で地球は崩壊することもなく、平和な1年でした(そういうのがあったんです、当時)。
インターネットもそれほど普及していなかった時代、もしいまの情報化社会の水準で2000年を迎えていたら、どんなフェイクニュースであふれていたでしょうね。
エクセルのシリアル値について
セルB2~B4まで「1900/2/28」「1900/2/29」「1900/3/1」と記載しました。エクセルは、うるう年のルールに反し、1900年2月29日が存在してしまっています。
100で割れる西暦のため、うるう年が存在しないのがルールです。
この誤りは、Excelがその前身や競合していたソフトウェア、Lotus 1-2-3との互換性を維持するために採用したものです。
Lotus 1-2-3が、1900年を誤ってうるう年として扱ってしまったため、Excelもこの誤りを引き継いでしまいました。
これは、最新版のExcel 365でも継承しています。
現在、この誤りはほとんどのソフトウェアやシステムで修正されていますが、互換性のためにExcelでは1900年のうるう年の誤りが維持されています。
ただし、2100年(これも100で割り切れるため、うるう年ではない)に関しては、正確に扱われています。
それでは、過去と未来の日付データではなく、今年の日付データを入力してみましょう。
この記事を記載しているのが2023年ですので「10/22」とセルに入力すると、西暦は2023年が自動入力されて表示されます。
セルには「10/22」ではなく「10月22日」と表示されました。
[ホーム]タブ の中央、[ユーザー定義] と表示されているところをご覧ください。
このパーツは、表示形式を設定するもので、今 [ユーザー定義] と表示されております。
本来 [ユーザー定義] とは、自分自身で設定する機能ですが、「10/22」と入力すると、エクセル側が用意した日付形式を自動で [ユーザー定義] として変更します。
その変更結果が「10月22日」という表示です。ここでもうひとつ、エクセルが自動で切り替えを行っている途中の処理があります。
そのフローを順番にご説明すると、以下の通りです。
- 「10/22」と入力する
- エクセルがシリアル値に置き換える
- [ユーザー定義] として「10月22日」と表示する
2のシリアル値に置き換える、について解説をします。そのためには、この [ユーザー定義] を [標準] に置き換えてみましょう。
セルの日付は、5桁の数字に置き変わりました。これがシリアル値です。
日付を入力すると、エクセルは自動でシリアル値に変換を行います。この値は、1900年1月1日を1と起算して、2023年10月22日は45221日目であることを表しています。
実際にはうるう年のルールに相違があるため、45220日が正しいのですが、1900年2月29日を含めている値のため、45221日目となっております。
このひと続きの値(シリアル値: Serial Value)があるからこそ、日付は計算ができる値、数値データとして扱うことができるわけです。
例えば、「45221」に「1」を加えたら「45222」になります。これを日付の表示形式に変更すれば、10月23日になるということです。
エクセルが自動で表示変更をする [ユーザー定義] の表示は、セルに「10/22」と入力したタイミングに限定されますが、いったん書式設定を「短い日付」にしてみます。
これを設定すると、
翌日の日付になる、という仕掛けが理解できたのではないかなと思います。ぜひ、サンプルデータで日付データとシリアル値を確認してくださいね。