ich habe folgendes Problem.
Über ein UserForm gibt der mitarbeiter Kalenderwoche und tag ein.
Jetzt soll mir in der Ausgabe aber folgendes erscheinen.
Eingabe :
KW = 34
Montag
Ausgabe:
Montag; 22.08.2016
Gruß Armin
Sub ff()
MsgBox GetDateFromWeek(26 + 1, vbTuesday) ' Im Jahr 2016 muss zu der Kalenderwoche noch eine _
_
Woche hinzugefügt werden da die KW1 nicht ab dem 1.1.2016 anfängt sondern 4.1.2016
End Sub
Public Function GetDateFromWeek(ByVal nWeek As Integer, _
Optional ByVal nDayOfWeek As VBA.VbDayOfWeek = vbMonday, _
Optional ByVal nYear As Integer = -1) As Date
Dim nCurWeek As Integer
Dim vStart As Variant
Dim vMonday As Variant
Dim vSunday As Variant
Dim nDay As Integer
' Kein Jahr angeben? Dann aktuelles Jahr verwenden!
If nYear = -1 Then nYear = Year(Now)
' aktuelle Woche im Jahr nYear ermitteln
vStart = DateSerial(nYear, Month(Now), Day(Now))
nCurWeek = Val(Format$(vStart, "ww", vbMonday))
' Datum der gewünschten Woche ermitteln
vStart = DateAdd("ww", nWeek - nCurWeek, vStart)
' Wochenanfang ermitteln
nDay = Weekday(vStart, vbMonday)
' Datum des gewünschten Wochentags ermitteln
If nDayOfWeek = vbSunday Then
GetDateFromWeek = DateAdd("d", -nDay + 7, vStart)
Else
GetDateFromWeek = DateAdd("d", -nDay + nDayOfWeek - 1, vStart)
End If
End Function
Function MoInKW(KW As Integer, Jahr As Integer) As Date
MoInKW = CDate("4.1." & Jahr) + KW * 7 - 7 - CDate("2.1." & Jahr) Mod 7
End Function
GrußFunction TagInKW(KW As Integer, Jahr As Integer, Optional Tag As String = "Mo") As Date
TagInKW = CDate("4.1." & Jahr) + KW * 7 - 7 - CDate("2.1." & Jahr) Mod 7
TagInKW = TagInKW + InStr(1, " modimidofrsaso", Left(Tag, 2), 1) / 2 - 1
End Function
GrußUm das Datum aus KW und Tag in Excel zu ermitteln, kannst du die folgende VBA-Funktion nutzen. Diese Funktion hilft dir dabei, das Datum basierend auf einer eingegebenen Kalenderwoche (KW) und einem Wochentag zu berechnen:
ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.Einfügen auf Modul klickst.Function TagInKW(KW As Integer, Jahr As Integer, Optional Tag As String = "Mo") As Date
TagInKW = CDate("4.1." & Jahr) + KW * 7 - 7 - CDate("2.1." & Jahr) Mod 7
TagInKW = TagInKW + InStr(1, " modimidofrsaso", Left(Tag, 2), 1) / 2 - 1
End Function
=TagInKW(34, 2016, "Mo").Mit dieser Funktion kannst du das Datum aus KW und den gewünschten Wochentag ermitteln.
Fehler: #NAME?
Fehler: Ungültiger Wochentag
Es gibt auch andere Ansätze, um aus Kalenderwoche Datum zu ermitteln. Eine einfache Excel-Formel könnte so aussehen:
=DATUM(Jahr; 1; (KW-1)*7 + 4) - WOCHENTAG(DATUM(Jahr; 1; 1); 2) + 1
Diese Formel gibt dir den Montag der gewünschten KW zurück. Du kannst sie erweitern, um das Datum für andere Wochentage zu berechnen.
Berechnung für Montag der KW 34 im Jahr 2016:
=TagInKW(34, 2016, "Mo") ' Ergebnis: 22.08.2016
Berechnung für Dienstag der KW 34 im Jahr 2016:
=TagInKW(34, 2016, "Di") ' Ergebnis: 23.08.2016
1. Wo finde ich die Kalenderwoche eines bestimmten Datums?
Du kannst die Funktion =KALENDERWOCHE(Datum;2) verwenden, um die Kalenderwoche eines bestimmten Datums zu ermitteln.
2. Wie kann ich das Datum aus einer Kalenderwoche und einem Wochentag in einer Formel berechnen?
Verwende die VBA-Funktion TagInKW oder die oben genannte Excel-Formel, um das Datum zu berechnen.
3. Ist es möglich, diese Funktion in Excel Online zu verwenden?
VBA-Funktionen sind in Excel Online nicht verfügbar. Du kannst jedoch alternative Excel-Formeln nutzen.