Comment puis-je convertir une semaine civile en date dans Excel?

j'ai un numéro de semaine et un an, et je voudrais 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 civile en une date précise?

16
demandé sur Steven Vascellaro 2012-06-12 15:41:55

8 réponses

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 dans A2 et le nombre de semaines dans B2

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

47
répondu barry houdini 2017-05-23 12:17:16

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

If A2 = Year and Week = B2
=IF(ISOWEEKNUM(DATE($A;1;1)-WEEKDAY(DATE($A;1;1);2)+1)>1;DATE($A;1;1)-WEEKDAY(DATE($A;1;1);2)+1+B2*7;DATE($A;1;1)-WEEKDAY(DATE($A;1;1);2)-6+B2*7)
1
répondu Mario 2015-01-07 11:52:26

Si vous êtes à la recherche pour le contraire d'obtenir une date à partir d'un weeknumber j'ai trouvé une solution en ligne et changé un peu:

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 formulaire à partir de asap-utilities.com/ et changé

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

DateSerial(iYear, 1, (iWeek * 7)

mise à Jour

il semble qu'au moins pour l'Allemagne les travaux formulaires ne sont pas comme prévu pour le année bissextile 2016 donc je l'ai changé pour ce

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
répondu surfmuggle 2015-03-16 14:02:19

si votre nombre de semaine est en A1 et l'année est en A2, suivant snippet pourrait vous donner des dates de semaine complète

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

bien sûr compléter la série de -4 à 2 et vous aurez des dates à partir de dimanche à samedi.

Espérons que cette aide.

1
répondu sathyam1992 2016-04-05 13:24:40

si le nombre de semaines est A1 et l'année A2, vous pouvez essayer:

A1*7+DATE(A2,1,1)
0
répondu Teetoo 2012-06-12 11:47:25
A1*7+DATE(A2,1,1)

s'il retourne un mercredi, changez simplement la formule en:

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

cela ne fonctionnera que pour les dates comprises dans une année civile.

0
répondu rogertwose 2013-05-02 02:59:07

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

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

0
répondu waqar piracha 2014-10-30 04:40:20

si A1 a le nombre de semaine et l'année comme un entier de 3 ou 4 chiffres dans le format wwYY alors la formule serait:

=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 retourner un jour de début de semaine constant. Utilisez la soustraction finale pour ajuster la date de début.

0
répondu Richard Kernick 2016-04-06 03:40:56