web-dev-qa-db-fra.com

Comment convertir une semaine calendaire en date dans Excel?

J'ai un numéro de semaine et un an et j'aimerais calculer la date du lundi pour cette semaine spécifique dans Microsoft Excel.

Year   Week   Date (Monday)
2012   1      January 2, 2012
2013   16     April 15, 2013
2014   42     October 13, 2014

Quelle formule puis-je utiliser pour convertir une semaine calendaire à une date spécifique?

17
Ber

Pour les numéros de semaine ISO, vous pouvez utiliser cette formule pour obtenir le lundi

=DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7

en supposant l'année en A2 et le numéro de la semaine en B2

c'est la même chose que ma réponse ici https://stackoverflow.com/a/10855872/1124287

48
barry houdini

Si votre numéro de semaine est en A1 et l'année en A2, l'extrait suivant peut vous donner les dates de la semaine complète

=$A$1*7+DATE($B$1,1,-4) through =$A$1*7+DATE($B$1,1,2)

Bien sûr, complétez la série de -4 à 2 et vous aurez des dates commençant du dimanche au samedi.

J'espère que cela t'aides.

1
sathyam1992

Si vous cherchez le contraire pour obtenir une date d'un numéro de semaine, j'ai trouvé une solution en ligne et je l'ai légèrement modifiée:

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

J'ai pris le formular de asap-utilities.com/ et j'ai changé 

DateSerial(iYear, 1, ((iWeek - 1) * 7) 

à 

DateSerial(iYear, 1, (iWeek * 7)

Mettre à jour

Il semble qu'au moins pour l'Allemagne le formulaire fonctionne pas comme prévu pour la année bissextile 2016 donc je l'ai changé pour ceci

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

Cela peut encore être faux mais mon test limité a donné les résultats attendus:

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

La formule suivante convient pour chaque année. Vous n’avez plus besoin de l’ajuster .. La condition préalable est que le lundi soit votre premier jour de la semaine. 

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

Une solution simple est de faire cette formule:

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

S'il renvoie un mercredi, modifiez simplement la formule en:

(A1*7+DATE(A2,1,1))-2

Cela ne fonctionnera que pour des dates dans une année civile.

0
rogertwose

Si le numéro de semaine est dans A1 et l'année dans A2, vous pouvez essayer:

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

Si A1 a le numéro de semaine et l'année sous forme d'entier à 3 ou 4 chiffres au format wwYY, la formule serait la suivante:

=INT(A1/100)*7+DATE(MOD([A1,100),1,1)-WEEKDAY(DATE(MOD(A1,100),1,1))-5

la soustraction du jour de la semaine vous assure de renvoyer un jour de début de semaine cohérent. Utilisez la soustraction finale pour ajuster le jour de début.

0
Richard Kernick

= (MOD (R [-1] C-1 100) * 7 + DATE (INT (R [-1] C/100 + 2000), 1,1) -2)

yyww que la semaine donnée exp: semaine 51 année 2014 sera 1451

0
waqar piracha