Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1052to1056
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

Kalenderwoche

Kalenderwoche
26.02.2009 12:09:10
felix
Hallo
Ich will per VBA die Kalenderwoche eines Datums (mit Zeitangabe) ausschreiben. Das geht in den meisten Fällen ganz gut mit:

Function Kw(d As Date) As Integer
Dim t As Long
t = DateSerial(Year(d + (8 - Weekday(d)) Mod 7 - 3), 1, 1)
Kw = (d - t - 3 + (Weekday(t) + 1) Mod 7) \ 7 + 1
If d = 0 Then Kw = 0
End Function


Nun tritt jedoch jeweils Sonntag nach 12:00 ein Problem auf (als Integer wird solch ein Datum aufgerundet). In der Formel von "Kw=" erhalte ich jetzt für "d-t" das selbe Resultat wie für den Montag. Somit wird die Kalenderwoche falsch ausgegeben.
Wie kann ich das Problem lösen? Gibt es eine VBA Funktion um das Datum abzurunden?
Vielen Dank im voraus
felix

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kalenderwoche
26.02.2009 12:22:20
harry
Hallo felix,
ich benutze folgende Funktion (ist nicht von mir) und hatte noch nie probleme:

Public Function DINKW(datum)
Dim tmp
tmp = DateSerial(Year(datum + (8 - Weekday(datum)) Mod 7 - 3), 1, 1)
DINKW = ((datum - tmp - 3 + (Weekday(tmp) + 1) Mod 7)) \ 7 + 1
If DINKW = 1 Then
If Month(datum) = 12 Then
tmp = Year(datum) + 1
Else
tmp = Year(datum)
End If
Else
tmp = Year(datum)
End If
tmp = Right(tmp, 2)
If Len(DINKW) = 1 Then
DINKW = 0 & DINKW
End If
DINKW = tmp & "-" & DINKW
End Function


Gruß
harry

AW: Kalenderwoche
26.02.2009 12:31:17
Luschi
Hallo Felix,
wenn in B2 Datum + Uhrzeit steht, dann mach es so:
=kw(GANZZAHL(B2))
Das funktioniert, weil das Datum nur eine formatierte Dezimalzahl ist und Ganzzahl die Kommastellen abschneidet.
Gruß von Luschi
aus klein-Paris
Das Ding rechnet sowieso falsch!
26.02.2009 14:06:02
Renee
Hi Felix,
IMHO rechnet die Funktion sowieso nicht nach ISO 8601.
Vielleicht besser so:

Function Kw(d As Date) As Integer
Kw = Int((d - Weekday(d, vbMonday) - _
DateSerial(Year(d + 4 - _
Weekday(d, vbMonday)), 1, -10)) / 7)
End Function


GreetZ Renée

AW: Kalenderwoche
27.02.2009 11:13:59
Felix
Hallo zusammen
Danke vielmals für das schnelle Feedback. Ich hätte noch erwähnen sollen, dass ich die Kalenderwoche in VBA berechnen will, da es ein Teil eines grösseren Codes ist.
@ Harry: Danke für den Code, aber er entspricht etwa dem Code von mir und löst leider das Problem nicht.
@ Harald: Danke für den Hinweis. Ich bin, wie ich anfangs nicht erwähnt habe, auf der Suche nach einer VBA Lösung.
@ Luschi: Dein Hinweis hat mich ein Stück weider gebracht. Mir war nicht bewusst, dass Ganzzahl/Int immer abrundet.
@ Renee: Das ist (vermutlich) ein Volltreffer. Das einzige Probleme das bei dem weit verbreiteten Code vom ersten Post auftritt, ist meiner Meinung nach, wenn das Datum auf einen Sonntag Nachmittag fällt. Sobald ich dazu komme, werd ich deinen Code ausgiebig testen und dann bescheid geben. Vielen Dank
Vielen Dank euch allen und schönes Wochende
felix
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige