Ich habe eine Wochennummer und ein Jahr und möchte das Datum des Montags für diese bestimmte Woche in Microsoft Excel berechnen.
Year Week Date (Monday)
2012 1 January 2, 2012
2013 16 April 15, 2013
2014 42 October 13, 2014
Mit welcher Formel kann ich eine Kalenderwoche in ein bestimmtes Datum konvertieren?
Für ISO-Wochennummern können Sie diese Formel verwenden, um den Montag zu erhalten
=DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7
unter der Annahme eines Jahres in A2 und einer Wochennummer in B2
es ist das Gleiche wie meine Antwort hier https://stackoverflow.com/a/10855872/1124287
Wenn Ihre Wochennummer in A1 und das Jahr in A2 ist, können Sie im folgenden Snippet Datumsangaben für die gesamte Woche erhalten
=$A$1*7+DATE($B$1,1,-4) through =$A$1*7+DATE($B$1,1,2)
Vervollständigen Sie die Serie natürlich von -4 bis 2 und Sie haben Termine von Sonntag bis Samstag.
Hoffe das hilft.
Wenn Sie nach dem Gegenteil suchen, um ein Datum aus einer Wochennummer zu erhalten, habe ich online eine Lösung gefunden und diese leicht geändert:
Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
' get the date from a certain day in a certain week in a certain year
fnDateFromWeek = DateSerial(iYear, 1, (iWeek * 7) _
+ iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End Function
Ich nahm das Formular von asap-utilities.com/ und änderte es
DateSerial(iYear, 1, ((iWeek - 1) * 7)
zu
DateSerial(iYear, 1, (iWeek * 7)
Es scheint, dass zumindest für Deutschland das Formular nicht wie erwartet für das Schaltjahr 2016 funktioniert, also habe ich es geändert
Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
' get the date from a certain day in a certain week in a certain year
If iYear = 2016 Then
curDate = DateSerial(iYear, 1, ((iWeek) * 7) _
+ iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
Else
curDate = DateSerial(iYear, 1, ((iWeek - 1) * 7) _
+ iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End If
fnDateFromWeek = curDate
End Function
Dies kann immer noch falsch sein, aber mein begrenzter Test ergab die erwarteten Ergebnisse:
Sub TestExample()
Debug.Print Format(fnDateFromWeek(2014, 48, 2), "ddd dd mmm yyyy") ' mo 24 Nov 2014
Debug.Print Format(fnDateFromWeek(2015, 11, 6), "ddd dd-mmm-yyyy") ' fr 13 Mar 2015
Debug.Print Format(fnDateFromWeek(2016, 36, 2), "ddd dd-mmm-yyyy") ' Mo 05 Sep 2015
End Sub
Die folgende Formel ist für jedes Jahr geeignet. Sie müssen es nicht mehr anpassen .. Die Voraussetzung ist, dass Montag der erste Tag der Woche ist.
If A2 = Year and Week = B2
=IF(ISOWEEKNUM(DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1)>1;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1+B2*7;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)-6+B2*7)
Eine einfache Lösung ist die folgende Formel:
A1*7+DATE(A2,1,1)
Wenn es einen Mittwoch zurückgibt, ändern Sie einfach die Formel in:
(A1*7+DATE(A2,1,1))-2
Dies funktioniert nur für Termine innerhalb eines Kalenderjahres.
Wenn die Wochennummer in A1
und das Jahr in A2
angegeben ist, können Sie Folgendes versuchen:
A1*7+DATE(A2,1,1)
Wenn A1 die Wochennummer und das Jahr als 3- oder 4-stellige Ganzzahl im Format wwYY hat, lautet die Formel:
=INT(A1/100)*7+DATE(MOD([A1,100),1,1)-WEEKDAY(DATE(MOD(A1,100),1,1))-5
die Subtraktion des Wochentags stellt sicher, dass Sie einen konsistenten Starttag der Woche zurückgeben. Verwenden Sie die letzte Subtraktion, um den Starttag anzupassen.
= (MOD (R [-1] C-1.100) * 7 + DATUM (INT (R [-1] C/100 + 2000), 1,1) -2)
yyww als angegebene Woche exp: Woche 51, Jahr 2014 wird 1451 sein