web-dev-qa-db-ger.com

Wie konvertiere ich eine Kalenderwoche in ein Datum in Excel?

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?

17
Ber

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

48
barry houdini

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.

1
sathyam1992

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)

Aktualisieren

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
1
surfmuggle

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)
1
Mario

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.

0
rogertwose

Wenn die Wochennummer in A1 und das Jahr in A2 angegeben ist, können Sie Folgendes versuchen:

A1*7+DATE(A2,1,1)
0
Teetoo

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.

0
Richard Kernick

= (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

0
waqar piracha