万年カレンダーを作るために必要なZeller(ツェラー)の公式

サヴァン症候群の人がカレンダー計算で驚異的な能力を示すという話を聞いたことがあるんですが、
たとえば「何十万年後の何月何日は何曜日?」って聞かれるとすぐに答えられるらしい。
常人にはそんなこと出来ないですが、Zeller(ツェラー)の公式を使うと出来ます。
しかしながらZeller(ツェラー)の公式を暗算で解けれるほど簡単ではないので、コンピュータのお力を借りて解いてみます。

http://easycgi.xrea.jp/perltips/zeller.htm

'指定した年月日から曜日を返す(曜日 〜Zeller(ツェラー)の公式〜)
'引数
'  y・・・(年4桁),
' m・・・(月)
'  d・・・(日)
'戻り値
' 0=日, 1=月, 2=火, 3=水, 4=木, 5=金, 6=土
'
Public Function zeller(y, m, d)

    If (m < 3) Then
        y = y - 1
        m = m + 12
    End If

    zeller = (y + Int(y/4) - Int(y/100) + Int(y/400) + Int((13*m+8)/5) + d) Mod 7

End Function

意外と簡単


といってもVBVBAにはWEEKDAY関数なるものがあるので、こんな公式使わなくてもいいんですが、、、
WEEKDAY 関数では 1900 年 1 月 1 日より前、9999 年 12 月 31 日より後の正しい曜日が返らないらしいです。
万年カレンダーを作りたい人は覚えてて損はないかも。