Clever-Excel-Forum

Normale Version: [Excel] Sommerzeit / Winterzeit
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallöchen,

rechtzeitig vor dem nahenden Ende der Zeitumstellung habe ich hier mal noch einen Code zur Berechnung der Daten für die Umstellung auf Sommer- bzw. Winterzeit. Ich habe im Beispiel mit Application.Evaluate die Nutzung der Tabellenblattfunktionen genutzt. Man kann das natürlich auch direkt mit VBA-Befehlen wie DateSerial und DatePart verarbeiten, z.B. bei der Sommerzeit mit     Sommerzeit = DateAdd("d", -DatePart("w", DateSerial(iJahr, 4, 1), vbMonday), DateSerial(iJahr, 4, 1))  ...  

Ergänzung:
shift-del hat mich gerade darauf hingewiesen, dass es da auch schon vor 1980 vereinzelt Sommerzeiten gab. Siehe dazu
Wiki Sommerzeit
Der Code passt also erst ab 1980 und müsste für die alten Jahrgänge angepasst werden. Bei Anwendung auf andere Länder ist natürlich zu prüfen, wie dort die Zeiten verliefen.

Eine Formellösung findet Ihr z.B. in einer Liste der Excel-Kalender-Feier-und-andere-Tage

Option Explicit
'Hinweise:
'Zu Sommer/Winterzeiten siehe Wiki https://de.wikipedia.org/wiki/Liste_der_Sommerzeiten
'Sommerzeiten gab es bereits in Deutschland bereits 1916-1918 und 1945-1949
'1945-1949 und 1980 auch regional unterschiedlich (Ost / West und 1980 Büsingen)

Public Function Sommerzeit(Optional ByVal iJahr As Integer)
'Variablendeklarationen
Dim dAtum  As Date
'Wenn nichts uebergeben wurde, dann das aktuelle Jahr nehmen
If iJahr = 0 Then iJahr = Year(Date)
'Sommer/Winterzeit gab's ab 1980
If iJahr > 1980 And iJahr < 2021 Then
    Sommerzeit = Format(Application.Evaluate("DATE(" & iJahr & ",4" & _
                      ",)-WEEKDAY(DATE(" & iJahr & ",4,),1)+1"), "DD.MM.YYYY")
'Aber 1980 ab dem 06.04.
ElseIf iJahr = 1980 Then
    Sommerzeit = "06.04.1980"
'Ende Sommer/Winterzeit gab's ab 1980
End If
End Function

Public Function Winterzeit(Optional ByVal iJahr As Integer)
'Variablendeklarationen
Dim dAtum As Date, iMon As Integer
'Wenn nichts uebergeben wurde, dann das aktuelle Jahr nehmen
If iJahr = 0 Then iJahr = Year(Date)
'Sommer/Winterzeit gab's ab 1980
If iJahr >= 1980 And iJahr < 2021 Then
  'Zeitumstellung bis 1995 am letzten Septemberwochenende, dann im Oktober
  If iJahr <= 1995 Then iMon = 10 Else iMon = 11
  Winterzeit = Format(Application.Evaluate("DATE(" & iJahr & "," & iMon & _
                      ",)-WEEKDAY(DATE(" & iJahr & "," & iMon & ",),1)+1"), "DD.MM.YYYY")
'Ende Sommer/Winterzeit gab's ab 1980
End If
End Function


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0