Option Explicit
Public Sub Test_KW()
Dim chkDate As Date
On Error GoTo Fehler
chkDate = InputBox("Bitte geben Sie ein Datum in dieser Form ein:", _
"DIN KW Berechnung", "1.1.2007")
If IsEmpty(chkDate) Then Exit Sub
If Not IsDate(chkDate) Then
MsgBox "Ungültiges Datum"
Exit Sub
End If
MsgBox "Die DIN KW für den " & Chr$(13) & _
chkDate & Chr$(13) & "lautet: " & DIN_KW(chkDate)
Exit Sub
Fehler:
MsgBox Err.Description
End Sub
Public Function DIN_KW(DasDatum As Date) As Byte
Dim KW As Date
KW = 4 + DasDatum - Weekday(DasDatum, 2)
DIN_KW = (KW - DateSerial(Year(KW), 1, -6)) \ 7
End Function
Hier ein Beispiel wie die Funktion als "Benutzerdefinierte Funktion" in EXCEL angewendet wird.
Speichern Sie den Code entweder in einem Modul Ihrer Arbeitsmappe, oder
speichern Sie
diese Funktion in der persönlichen Arbeitsmappe "PERSONL.XLS". Dann steht Ihnen
die
Funktion jederzeit zur Verfügung.
Mit der Funktion "DateSerial(Year(KW), 1, -6)" wird der 1.1. des
Jahres durch das in KW berechneten Datums bestimmt,... -6 Tage !!
-6 deshalb um eine allfälliges Datum gemäss DIN 1355 zu berechnen.
Daraus ergibt sich in unserem Beispiel der Wert 371.
Ein normales Jahr hat jedoch maximal 365/366 Tage
Der ermittelte Wert wird also durch 7 (Anzahl Wochentage) dividiert und wir
erhalten die
Ganzzahl ("Dim KW as Date") zurück als Wochennummer
DIN_KW = (KW - DateSerial(Year(KW), 1, -6)) / 7
In unserem Fall korrekterweise die Woche 53,... und nicht 1, wie EXCEL Ihnen
versucht darzustellen.