Translate

Freitag, 16. Dezember 2011

Wie kann die exakte Kalenderwoche aus einem Datum in Excel/Access/VBA ermittelt werden?

Die Kalenderwoche wird immer wieder gerne für die Terminplanung hinzugezogen.
Leider gibt es in Excel und Access standardmäßig keine Funktion, die aus einem Datum die Kalenderwoche errechnet.
Achtung, einige Lösungen die im Netz kursieren sind fehlerhaft.

Wir haben hier für Sie die Formel zusammen gestellt um die exakte Kalenderwoche zu errechnen.


In Access:
Wenn(IstDatum([Datumsfeld]);Int(([Datumsfeld]-Wochentag([Datumsfeld];2)-DatSeriell(Jahr([Datumsfeld]+4-Wochentag([Datumsfeld];2));1;-10))/7);0)

Das Feld [Datumsfeld] ist zu ersetzen durch ihren Feldnamen.

Hinweis:Die kursierende Lösung DatTeil("ww";[datum];2;2) ist teilweise fehlerhaft. Die Kalenderwoche vom 29.12.2031 ist 1 und nicht 53.


In Excel:WENN(ISTZAHL(A1);KÜRZEN((A1-WOCHENTAG(A1;2)-DATUM(JAHR(A1+4-WOCHENTAG(A1;2));1;-10))/7);0)

Der Bezug A1 verweist auf ihre Datumszelle.

Hinweis:Excel-Funktion KALENDERWOCHE ist nicht Din-Konform. Laut Excel beginnt die Kalenderwoche 1 immer am 01.01. eines Jahres. Dies stimmt mit der deutschen Din-Norm nicht überrein. Hier ist die 1.KW immer die Woche in die der 04.01. fällt. Ist also der 1ste eines Jahres in einer anderen woche als der 4. zeigt die Kalenderwochen - Funktion von excel einen Falschen wert.

In VBA:
Public Function CalWeek(Date_Value As Variant) As Byte
    'Created by Jean Pierre Allain
   
    Dim tmp As Date
    On Error GoTo Err_Proc
    If IsNumeric(Date_Value) Then
        tmp = Date_Value
    ElseIf IsDate(Date_Value) Then
        tmp = DateValue(Date_Value)
    Else
        GoTo Exit_Proc
    End If
    CalWeek = Int((tmp - Weekday(tmp, 2) - DateSerial(Year(tmp + 4 - Weekday(tmp, 2)), 1, -10)) / 7)
   
Exit_Proc:
    Exit Function
   
Err_Proc:
    Resume Exit_Proc
End Function

Anmerkung: Bei einem ungültigen Datum, liefern die Funktionen den Wert 0 zurück.

1 Kommentar:

  1. Die KALENDERWOCHE ist ab Excel 2010 Din-Konform, mit dem Schalter 21.
    Die beiden VBA Funktionen DatePart und Format haben hier tatsächlich ein Problem.
    Das umgeht man wenn man beim Datum einen Dienstag nimmt.
    =A1+1-WOCHENTAG(A1;3)
    Also dDatum = dDatum +2 - Weekday(dDatum ,vbMonday)
    Dann hab ich immer einen Dienstag und mit dem gehts besser.

    AntwortenLöschen