PR

 うるう年はご承知の通り、西暦が4で割り切れる年です。ただし100で割り切れる場合は平年になりますが400で割り切れるならばうるう年になります。少し面倒ですがこのルールで判定する表を作ってみました(図1)。

拡大表示
図1 うるう年の計算ルールに従ってうるう年を判定し、併せてExcelの関数がその年の2月29日を何日と表示するかを調べた。1900年は平年であるにもかかわらず2月29日がある

 割り算の余りを求めるMOD関数を使って、割り切れる場合は○を表示しています。4、100、400で割り切れるかどうかの結果に基づいてE列にうるう年を判定してみました。

 一方、Excel で日付計算をするときは、内部で「シリアル値」を使っています。シリアル値は1900年1月1日を「1」として1日ごとに1増える値です。

 例えば2004年11月22日なら内部で38313という値を保持しています。表示形式の変更や関数を使って「2004/11/22」としたり「22-Nov-04」などと見た目は自在に変更できます。「月曜日」「Mon」などと曜日の表示もできます。

幻の1900年2月29日

 Excelはよくできていて、存在しない日付を関数で計算しようとすると、相当する正しい日付に変換してくれます。例えば1月32日は自動的に2月1日となります。13月1日ならば翌年の1月1日になります。

 図1のF列にはDATE関数を使って、A列の年の2月29日を計算してみました。うるう年なら2月29日とそのまま表示され、平年ならば3月1日と表示されるはずです。

 改めて図1を見ると、おかしいのが1900年です。うるう年の判定ルールに基づけば平年なのにExcelの関数では2月29日が存在することになっています。そうなんです、Excelが間違っているのです。でも弘法も筆の誤り、というわけではなく、Excelより古い表計算ソフトが間違っていたのと互換性を取るために苦渋の選択をした「仕様」です。

 1900年1月1日からの日付を表示してみると確かに1900年2月29日という幻の1日が現れます(図2)。この影響で同年1月1日から2月28日までの59日間は曜日が間違いです。

拡大表示
図2 あってはならない平年の2月29日。古くからある表計算ソフトとの互換性の兼ね合いで残されているが、幻の1日のために、それ以前の59日間は曜日が間違っている

 日経パソコンのホームページからファイルをダウンロードしてセルの中身をご覧いただければ分かりますが、図2のB列は年月日のシリアル値をセルの書式設定機能で曜日表示にしているだけです。関数は使っていないし、ましてや「月曜日」「火曜日」などと文字を入力しているわけでもありません。

日数を間違う59日間

 非常にまれなケースですが、この59日間に生まれた人、あるいは創業した企業の「本日は生誕(創業)○○日目」などをExcelの日付関数で計算していたとすれば1日分誤差が出るのでご注意下さい。でも幻の1日より後なら大丈夫です。

 ちなみにExcelの日付関数を使えばスマートにうるう年の判定ができます。図3に入れた式は判定したい年の2月29日の「日」を求めるものです。うるう年ならそのまま29、平年なら3月1日に繰り上がるので1になるはずです。IF関数を使って、1ならば「平年」、さもなければ「うるう年」と表示しました。

図3 1901年以降ならExcelの関数で簡単にうるう年を判定できる。その年の2月29日の「日」を求めて1ならば平年、さもなければうるう年

 年月日からシリアル値を求めるのがDATE関数、シリアル値から日を求めるのがDAY関数です。

 2月29日が何月なのかを調べてもいいでしょう。うるう年なら2月だし、平年なら3月です。月を求めるのはMONTH関数です。ほかの判定方法もあるはずですからぜひ考えてみてください。頭の体操になります。

■解説で使用したExcelファイルを以下からダウンロードできます。

 自己解凍形式(52KB)
 Excelファイル形式(83KB)

 うまくダウンロードできない場合は日経パソコン講座ファイルのダウンロード方法をご覧ください。