Variante A mit DateSerial
Hierbei wird vorausgesetzt, dass es ein Feld [GrundDatum] gibt, aus welchem das Schaltjahr ermittelt werden soll. Das Ergebnis im Ausdruck15 ist der Text «Schaltjahr» oder «kein Schaltjahr».
Ausdr15:Wenn(1+DatSeriell(Jahr([GrundDatum]);12;31)-DatSeriell(Jahr([GrundDatum]);1;1)=366;»Schaltjahr»;»kein Schaltjahr»)
Varuante B mit DatDiff
Es wird die Differenz in Tagen «d» vom 1.1. bis zum 12.31. (mm.dd) berechnet. Ein normales Jahr hat 365 Tage, ein Schaltjahr 366. Wenn also die Differenz + 1 = 366 ist, dann ist es ein Schaltjahr.
Ausdr16: Wenn(DatDiff("d";"1.1." & Jahr([GrundDatum]);("12.31." & Jahr([GrundDatum])))+1=366;"Schaltjahr";"kein Schaltjahr")
Rückgabe der Anzahl Tage für den Monat Februar
Ausdr17: Wenn(DatDiff("d";"1.1." & Jahr([GrundDatum]);("12.31." & Jahr([GrundDatum])))+1=366;29;28)
Als VBA Lösung z.B. für Excel
Sub Schaltjahr()
Dim EinJahr As Variant
Dim NumJahr As Integer
EinJahr = InputBox("Bitte zu prüfendes Jahr vorgeben!")
If EinJahr = "" Then
Exit Sub
End If
If Not (IsNumeric(EinJahr)) Then
MsgBox "Eingabe nicht numerisch!"
Exit Sub
End If
NumJahr = CInt(EinJahr)
If Not (NumJahr Mod 4) = 0 Then
MsgBox ("kein Schaltjahr!")
Exit Sub
End If
If (NumJahr Mod 100) = 0 And Not ((NumJahr Mod 400) = 0) Then
MsgBox ("kein Schaltjahr!")
Else
MsgBox ("Schaltjahr!")
End If
End Sub
Weitere Möglichkeit in VBA
Wir können auch auf den 29. März abfragen. Die Funktion Day(Datum) Liefert True oder False zurück wenn das Datum existiert.
Function schaltjahr(jahr As Integer) As Boolean
schaltjahr = Day(DateSerial(jahr, 2, 29)) = 29
End Function
Wer misst, misst Mist und wie rechnet Access und Excel?
Prüfen Sie, ob das Jahr 1900 ein Schaltjahr war oder nicht. Gibt es den 29.2.1900?
Hinweis: DateSerial() ist eine serielle Zahl welche mit dem Wert 1 beginnt und für jeden ganzen Tag eins dazu zählt.
Seit der gregorianischen Kalenderreform (1582) sind diejenigen Jahre Schaltjahre die
folgendes erfüllen …
1. jedes durch 4 teilbare Jahr (Jahr Mod 4 = 0: also 1904, 1908, 1912, etc. )
2. nicht jedoch Jahre, die durch 100 teilbar sind (nicht Jahr Mod 100 = 0: 1800, 1900)
3. aber doch Jahre die durch 400 teilbar sind (Jahr Mod 400 = 0: 1600, 2000, 2400, etc.)
Volle Jahrhunderte sind kein Schaltjahr, es sei denn sie sind durch 400 teilbar.
Deshalb war 1900 kein Schaltjahr, 2000 aber doch!
Microsoft hat in der 1. Excel-Version irrtümlich den 29.02.1900 integriert und in den folgenden Versionen aus Kompatibilitätsgründen nie eliminiert!
Ergo
Function SchaltJahr(Jahr As Integer) As Boolean
' Falsch = Jahr ist kein Schaltjahr , Warh = Jahr ist ein Schaltjahr
SchaltJahr = Jahr Mod 4 = 0 And (Jahr Mod 100 <> 0 Or Jahr Mod 400 = 0)
End Function
Diese Funktion mit Mod kann auch in die obige Access Abfrage eingebaut werden um das Schaltjahr oder die Anzahl Tage im Februar zu ermitteln.