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