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?
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
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)
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
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.
si le nombre de semaines est A1
et l'année A2
, vous pouvez essayer:
A1*7+DATE(A2,1,1)
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.
=(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
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.