Wie kann ich aus der Zahl einer Kalenderwoche die entsprechenden Daten der Woche errechnen?
Die folgende Funktion stellt ersten und letzten Tag der Kalenderwoche fest und gibt auf dieser Basis den Zeitraum aus:
Function Zeitraum(ByVal Jahr As Integer, ByVal KW As Variant) As String
Dim datBeg As Date, lngT As LongPtr
Application.Volatile
Zeitraum = ""
If IsNumeric(Jahr) And IsNumeric(KW) Then
lngT = DateSerial(Jahr, 1, 4)
lngT = lngT - Weekday(lngT, 2) + 7 * KW - 7
If (Year(lngT + 4) = Jahr) Then datBeg = lngT + 1
Zeitraum = Format(datBeg, "DD.MM.YYYY") & " - " & Format(datBeg + 6, "DD.MM.YYYY")
End If
End Function
In die Zelle muss dann nur noch:
=Zeitraum(Jahr;KW)
Soll es ohne Funktion in der Zelle funktionieren und der Zeitraum sofort eingetragen werden, kann folgender Code in das Klassenmodul der jeweiligen Tabelle (Doppelklick auf Tabelle im VBA-Editor):
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 4 And Target.Column = 1 Then
Application.EnableEvents = False
Target = Zeitraum(Range("B1"), Target)
Application.EnableEvents = True
End If
End Sub
Der Code wird ausgeführt, wenn die Eingabezelle in Spalte 1 und Zeile >= 4 liegt; verwendet wird das Jahr aus Zelle B1. Application.EnableEvents = False ist hier wichtig, weil die eingegebene KW durch den Zeitraum überschrieben wird und das Change-Ereignis sonst immer wieder aufgerufen würde.