1: um die Kalenderwoche in VBA zu bestimmen habe ich bislang verwendet:
Function udfCW(datDate As Date) As Long
Dim datTmp As Date
datTmp = DateSerial(Year(datDate + (8 - Weekday(datDate)) Mod 7 - 3), 1, 1)
udfCW = ((datDate - datTmp - 3 + (Weekday(datTmp) + 1) Mod 7)) \ 7 + 1
End Function
Aus der Erinnerung ist das die VBA-Funktion, die auch sämtliche Sonderfälle erschlägt.Ich habe aber eben festgestellt, dass diese Funktion bei Übergabe eines Zeitstempels mit Uhrzeit am Sonntagmittag um 12:00Uhr auf die nächste KW umschaltet. Nach DIN beginnt die KW aber am Montag um 00:00 Uhr.
Bsp: 25.09.2011 ist ein Sonntag:
- 25.09.2011 11:59:59 ergibt KW38
- 25.09.2011 12:00:00 ergibt KW39 - ist falsch, denn die KW39 beginnt erst am 26.09.11 um 00:00 Uhr.
Klar, denn Fehler kann man umgehen, indem man der Funktion das Datum als "Ganzzahl" übergibt, bzw. mit "datDate = Int(datDate)" in Ganzzahl umwandelt.
2: Eine andere Variante z.Bsp. von Ramses aus http://www.online-excel.de/excel/singsel_vba.php?f=48:
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
Die stimmt für den 25.09.2011 auch mit Uhrzeiten, aber stimmt die auch für alle Datumsangaben und Sonderfälle?Welche stimmt den nun?
Vielen Dank vorab
Grüße
Christian