Hallo Ihr da,
Ich habe mal aus verschiedenen (namhaften) Internetquellen verschiedene VBA-Funktionen für die Berechnung vom Ostersonntag in ein Modul gepackt und per benutzerdefinierter Formel in einer Liste von Jahren (Excelsheet) miteinander verglichen. Manche rechnen angeblich nach Gauß, andere nach Hetterich. Mein Problem, je höher die Jahre werden, desto mehr weichen sie alle von der Vergleichsberechnung nach Gauß sowie auch untereinander ab. Manche ergeben gar einen Samstag oder Dienstag. Am ehesten passt noch Ostersonntag1 von Peter Osterrodt. Aber selbst die weicht im Jahr 2079 und ab dem Jahr 2204 manchmal um 1 Woche, um die Jahre 5400 und 5510 sogar um 2 Wochen nach vorne oder hinten vom Vergleich ab. Wer hat denn nun recht?
Mein Ziel, möglichst für den gesamten Range von 100 bis 9999 das korrekte Osterdatum berechnen. Oder wenigstens ab 1900 bis möglichst weit.
Kann ich das Vergleichsdatum als gegeben nehmen oder kann das vielleicht auch falsch sein?
Function Ostersonntag1(dasjahr As Long) As Date
'von https://www.online-excel.de/excel/singsel_vba.php?f=21
Ostersonntag1 = CDate(WorksheetFunction.Round((CDate(Day(Minute(dasjahr / 38) / 2 + 55) _
+ (IIf(Minute(dasjahr / 38) / 2 + 55 < 60, 1, 0)) & ".4." & dasjahr) / 7), 0) * 7 - 6)
End Function
Public Function Ostersonntag2(Optional ByVal nYear As Long = 0) As Date
Dim d As Long
Dim Delta As Long
'von: https://www.vbarchiv.net/tipps/tipp_2249-osterdatum-nach-gauss-berechnen-kompakte-form.html
d = (((255 - 11 * (nYear Mod 19)) - 21) Mod 30) + 21
Delta = d + IIf(d > 48, 1, 0) + 6 - ((nYear + Int(nYear / 4) + d + IIf(d > 48, 1, 0) + 1) Mod 7)
Ostersonntag2 = DateAdd("d", Delta, DateSerial(nYear, 3, 1))
End Function
Function Ostersonntag3(jahr As Integer) As Date
'Ostersonntag nach Gauß'scher Osterformel berechnen
'von https://www.herber.de/forum/archiv/1772to1776/1772604_VBA_Termine_mit_Feiertagsverschiebung.html
Dim x As Integer
x = (((255 - 11 * (jahr Mod 19)) - 21) Mod 30) + 21
Ostersonntag3 = DateSerial(jahr, 3, 1) + x + (x > 48) + 6 - ((jahr + jahr \ 4 + x + (x > 48) + 1) Mod 7)
End Function
Vergleichsformel per Excel = 2. Lösung nach Gauß von https://www.herber.de/excelformeln/pages/Ermittlung_des_Ostersonntags_und_aller_beweglichen_Feiertage.html
Gruß Mr. K.
|