Moin!
Dann will ich auch mal basteln …

Wenn man den gregorianischen Kalender betrachtet, so wiederholen sich alle 400 Jahre die Bedingungen.
Dies führt (auch) dazu, dass man
in Excel auch mit Daten zwischen 1582 und 1900 (einschließlich!) korrekt rechnen kann, wenn man zu den Daten jeweils 400 Jahre addiert.
Beispiel: Zeitraum zwischen dem 17.8.1787 und dem 18.4.1899:
• VBA Direktfenster:
Code: Alles auswählen
?DateSerial(1899, 4, 18) - DateSerial(1787, 8, 17) + 1
40787
• In Excel addiere ich jeweils 400 Jahre (17.8.2187 und 18.4.2299) und erhalte die gleichen 40.787 Tage
Kommen wir jetzt zu den Schalttagen.

Ein Durchschnittsjahr im gregorianischen Kalender dauert 365,2425 Tage.
Betrachten wir einen Zeitraum von 800 Jahren (1600 bis 2399) und schauen, ob der Kalender in VBA korrekt ist:
(DateSerial(1755,
1, 0) ist der
31.12.1754)
Code: Alles auswählen
Sub Jahrestage()
Dim j&, t&, Tage&
Dim Durchschnittsjahr#
For j = 1600 To 2399
Tage = DateSerial(j, 12, 31) - DateSerial(j, 1, 0)
t = t + Tage
Next
Durchschnittsjahr = t / (2399 - 1600 + 1)
MsgBox "Ein Durchschnittsjahr dauert " & Durchschnittsjahr & " Tage!"
End Sub
Obwohl wir jetzt wissen, VBA korrekt rechnet, kann man ja mit obigen 3 Regeln arbeiten.
Dazu brauchen wir die Modulooperatoren mod 4, mod 100 und mod 400:
Code: Alles auswählen
Sub Modulo()
Dim j&, Tage&
Dim Durchschnittsjahr#
For j = 1600 To 2399
Tage = Tage + 365
If j Mod 4 = 0 Then Tage = Tage + 1
If j Mod 100 = 0 Then Tage = Tage - 1
If j Mod 400 = 0 Then Tage = Tage + 1
Next
Durchschnittsjahr = Tage / (2399 - 1600 + 1)
MsgBox "Ein Durchschnittsjahr dauert " & Durchschnittsjahr & " Tage!"
End Sub
q.e.d.
Ralf