Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1228to1232
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Kalenderwoche - welche Fnkt stimmt denn nun?

VBA Kalenderwoche - welche Fnkt stimmt denn nun?
Christian
Hi Leute,
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
AW: VBA Kalenderwoche - welche Fnkt stimmt denn nun?
24.09.2011 09:29:34
Hajo_Zi
Hallo Christian
Bei Ramses wurde ich davon ausgehen das die für alle Daten geht. Ab Version 2010 würde ich in der Tabelle den Schalter 21 benutzen.

AW: VBA Kalenderwoche - welche Fnkt stimmt denn nun?
24.09.2011 11:33:08
Christian
hallo Hajo,
hab's eben mal für ca. 3 Mio Tage (ohne Uhrzeiten) durchlaufen lassen und verglichen.
Beide Funktionen liefern das gleiche Ergebnis. Insofern werde ich zukünftig den Code von Ramses verwenden.
Gruß
Christian
AW: VBA Kalenderwoche - welche Fnkt stimmt denn nun?
24.09.2011 10:29:20
Luschi
Hallo Christian,
habe mal die udfCW-Funktion ein bischen auseinanergemommen. dabei kommt
heraus, daß der Funktionsterm
datDate - datTmp - 3 + (Weekday(datTmp) + 1) Mod 7 folgende Zwischenwerte
berechnet:
bei 25.09.2011 11:59:59 --> 265.499988425923
bei 25.09.2011 12:00:00 --> 265.5
Die nachfolgende Rechenoperation ergibt bei

265.499988425923 \ 7  --> 37
265.5 \ 7                      --> 38

Und dagenau liegt der Hase im Pfeffer. Der Divisionsoperator rundet und zwar so, wie es in der _ Excel-2010 Vba-Hilfe steht:

Vor der Division werden die numerischen Ausdrücke in Ausdrücke der Typen Byte, Integer oder Long gerundet.
Gru0 von Luschi
aus klein-Paris
PS: so sollte die Funktion klappen:

Function udfCW(datDate As Date) As Long
Dim datTmp As Date
datTmp = DateSerial(Year(datDate + (8 - Weekday(datDate)) Mod 7 - 3), 1, 1)
udfCW = (Fix(datDate - datTmp - 3 + (Weekday(datTmp) + 1) Mod 7) \ 7) + 1
End Function

Anzeige
AW: VBA Kalenderwoche - welche Fnkt stimmt denn nun?
24.09.2011 11:48:45
Christian
Hi Luschi,
Danke für Hilfe!
siehe auch meine Antwort an Hajo. Die Funktion von Ramses kann allerdings Datumsangaben vor" 03.01.101" nicht verarbeiten, aber Datumsangaben vor 1976 sind bei DIN-KW eh Makulatur.
viele Grüße
Christian
AW: VBA Kalenderwoche - welche Fnkt stimmt denn nun?
24.09.2011 11:59:42
Hajo_Zi
Hallo Christian,
Excel kann erst Daten ab 1.1.1900 verarbeiten bzw. mit ein weng Aufwand. Siehe Excelformeln.de
Gruß Hajo
schön, aber der Datentyp "Date" in VBA ...
24.09.2011 12:05:12
Christian
... kann ein Datum im Bereich vom 01. Januar 100 bis zum 31. Dezember 9999 speichern, Hajo.
Tabelle interessiert mich hier nicht.
Grruß
Christian
Anzeige
Im Prinzip ist das alles ja richtig, aber es...
24.09.2011 18:15:53
Luc:-?
…gibt ein Wiederholungsintervall, mit dem man theoretisch jedes Datum vom Urknall bis zum Kollaps darstellen könnte (auch in der Tabelle), falls dabei die Schaltsekunden vernachlässigt wdn können.
Gruß + schöWE, Luc :-?

33 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige