ツェラーの公式

スポンサーリンク

「○○○○年△△月××日って何曜日だったっけ・・・」って気になる方はいないと思いますが、実は数式で求める方法があるのをご存じでしたか?

名前を「ツェラーの公式(Zeller’s congruence)」といいます。
https://ja.wikipedia.org/wiki/ツェラーの公式

Excelで計算

Excelで計算してみるとこんな感じになります。

y年m月d日の曜日を求める時に、1、2月は前年の13月、14月として計算するため①、②にも条件式が入ります。
① IF(D3<3,B3-1,B3)
② IF(D3<3,12+D3,D3)
③ F3

検算のためExcelの関数を使用して計算した結果も追加しておきます。
④ DATE(B3,D3,F3)
⑤ WEEKDAY(G8,2)
⑥ VLOOKUP(G9,J3:K9,2)

ツェラーの公式をWikiのパーツ毎に計算します。
⑦ FLOOR(G4/100,1)
⑧ MOD(G4,100)
⑨ IF(G4>1582,5G12+FLOOR(G12/4,1),6G12+5)
⑩ FLOOR(MOD(G6+FLOOR(26*(G5+1)/10,1)+G13+FLOOR(G13/4,1)+G14+5,7),1)+1
⑪ VLOOKUP(G15,J3:K9,2)

B3(年)、D3(月)、F3(日)から式一本で計算するとこうなります。
⑫ FLOOR(MOD(F3+FLOOR(26(IF(D3<3,12+D3,D3)+1)/10,1)+MOD(IF(D3<3,B3-1,B3),100)+FLOOR(MOD(IF(D3<3,B3-1,B3),100)/4,1)+IF(IF(D3<3,B3-1,B3)>1582,5FLOOR(IF(D3<3,B3-1,B3)/100,1)+FLOOR(FLOOR(IF(D3<3,B3-1,B3)/100,1)/4,1),6*FLOOR(IF(D3<3,B3-1,B3)/100,1)+5)+5,7),1)+1

B3、D3、F3の入力用セルと⑫の式があれば試せるので是非試してみてください。

Excel小ネタ

④で使っているDATE関数ですが、1900年より前には対応していません。

また、⑤で使っているWEEKDAY関数は1900/01/01~1900/02/28の答えが間違っています。
400で割り切れない100の倍数の年は閏年ではないという条件が含まれていないためExcelには1900/02/29が存在するためのようです。シリアル値も1900/02/29が60で1900/03/01が61ですね。
(バグではなく互換性のために意図的に入れてあるようです。)

2000/02/29って実は400年に一度の珍しい日だったんですね。
この日に生まれていたら暦にすごく興味沸きそうですね。

コメント

タイトルとURLをコピーしました