見出し画像

カレンダー計算マクロ

 このところ、サヴァン症候群について少し調べています。私の「採譜」(耳コピ、聴音)の能力が、サヴァン症候群に典型的らしいからです。私は自閉症スペクトラム障害の診断がくだっており、また、できないことが多いわりに、突出してできることは極端にできて、その差がはなはだしいからです。

 サヴァン症候群の人に典型的な症状のひとつとして、「カレンダー計算」ができるというのがあります。「1996年10月20日は何曜日ですか」と聞かれて「日曜日です」と即答する能力のことです。私にこのスキルはありません。こういうものは個人差ですから。以下にリンクをはらせていただくかたもこれがおできになるようです。


 これができない代わりと言ってはなんですが、私にはプログラミングのスキルがあり、「カレンダー計算」をエクセルでするマクロをいま、書いてみました。参考にしたのは「カレンダー計算」で検索して出る「ツェラーの公式」という、年月日を代入して曜日の出る公式です。ツェラーの公式は全面的に信頼しました。内容をきちんと理解したわけではありません。ごめんなさい。しかし、出て来る計算は単純で、確かに暗算が極端に得意な人なら(サヴァン症候群の人で暗算が極端に得意な人も多いです。私にそのスキルはないばかりか、私は多くの人よりずっと暗算は苦手です)、すぐに曜日が出るだろうなあ、と思うわけです。

 以下に、恥ずかしいですが、カレンダー計算マクロをさらしますね。これは、ツェラーの公式を全面的に信頼しており、私はなにもしていないに等しいです。(あんまり昔とか、あんまり未来すぎると、誤差が出るかもしれませんね。そこまで含めて理解していないです。)

Sub カレンダー計算()

Dim h As Integer
Dim y, m, d As Integer
Dim y2 As Integer
Dim youbi As String


y = InputBox("西暦で年を入力してください")
m = InputBox("月を入力してください")
d = InputBox("日を入力してください")


If m = 1 Or m = 2 Then
y = y - 1
m = m + 12
End If


y2 = y Mod 100

h = (d + Int(26 * (m + 1) / 10) + y2 + Int(y2 / 4) - 2 * Int(y / 100) + Int(y / 400)) Mod 7

Select Case h
Case 1
youbi = "日"
Case 2
youbi = "月"
Case 3
youbi = "火"
Case 4
youbi = "水"
Case 5
youbi = "木"
Case 6
youbi = "金"
Case 0
youbi = "土"
End Select

MsgBox youbi & "曜日です"


End Sub

いいなと思ったら応援しよう!