Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Datum aus KW per VBA und Option

Datum aus KW per VBA und Option
Frank
Hallo Experten,
gleich vorweg, VBA gut ist übertrieben!
Ich bräuchte eine VBA- Funktion, mit der ich aus einer KW das Datum ermitteln kann.
Als Parameter sollen Jahr, Kw und optional der Wochentag übergeben werden.
Fehlt die Angabe des Wochentags, soll der Montag als gegeben gewertet
werden.
Ich hoffe die Erklärung ist verständlich.
Grüße Frank
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Datum aus KW per VBA und Option
PeterW
Hallo Frank,
links gibt es die Schaltfläche Excel-Recherche (eventuell den linken Frame nach unten scrollen). Gib als Suchbegriff ein "Kalenderwoche". Schon die erste Fundstelle dürfte dein Problem lösen.
Gruß
Peter
Leider nicht....
Frank
Hallo Peter,
ich habe zuvor schon recherchiert, aber für mein Anliegen halt keine
Lösung gefunden. Nochmals zur Erinnerung, es wird eine VBA- Lösung
gesucht, mit der Option, den Wochentag selbst festzulegen.
Grpße Frank
Anzeige
AW: Leider nicht....
Josef
Hallo Frank!
Kopiere diesen Code in einem allgemeinen Modul.
Du kannst die Funktion in einer Tabelle verwenden,
aber auch in einem Makro!
Option Explicit

Public Function Datum_Aus_KW_und_Wochentag(Jahr As Integer, Kalenderwoche As Integer, _
Optional Wochentag As Integer)

'Wochentag 1=Mo bis 7=So
Dim iDay As Integer, iWeek As Integer
Wochentag = Wochentag - 1
If Wochentag < 0 Or Wochentag > 6 Then Wochentag = 0
If Jahr < 1900 Or Jahr > 3999 Then
Datum_Aus_KW_und_Wochentag = "#Jahr?"
Exit Function
End If
If Kalenderwoche < 1 Or Kalenderwoche > 53 Then
Datum_Aus_KW_und_Wochentag = "#Woche?"
Exit Function
End If
iDay = 1
iWeek = DINWeek(DateSerial(Jahr, 1, 1))
If iWeek <> 1 Then
Do Until DINWeek(DateSerial(Jahr, 1, iDay)) = 1
iDay = iDay + 1
Loop
Else
Do Until DINWeek(DateSerial(Jahr, 1, iDay)) <> 1
iDay = iDay - 1
Loop
iDay = iDay + 1
End If
Datum_Aus_KW_und_Wochentag = DateSerial(Jahr, 1, iDay + Wochentag) + (Kalenderwoche - 1) * 7
End Function

Private Function DINWeek(dat As Date) As Integer
Dim dValue As Double
dValue = DateSerial(Year(dat + (8 - Weekday(dat)) Mod 7 - 3), 1, 1)
DINWeek = (dat - dValue - 3 + (Weekday(dValue) + 1) Mod 7) \ 7 + 1
End Function

Sub test()
'zur verwendung in einem Makro
MsgBox Format(Datum_Aus_KW_und_Wochentag(2004, 14, 7), "ddd dd.mm.yyyy")
End Sub

Gruß Sepp
Anzeige
Das ist es , danke dir...oT
Frank
oT

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige