Как конвертировать календарную неделю в дату в Excel?
У меня есть номер недели и год, и я хотел бы рассчитать дату понедельника для этой недели в Microsoft Excel.
Year Week Date (Monday)
2012 1 January 2, 2012
2013 16 April 15, 2013
2014 42 October 13, 2014
Какую формулу я могу использовать для преобразования календарной недели в определенную дату?
Ответы
Ответ 1
Для номеров недели ISO вы можете использовать эту формулу для получения понедельника
=DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7
предполагаемый год в A2 и номер недели в B2
это то же самое, что и мой ответ здесь fooobar.com/questions/347565/...
Ответ 2
Следующая формула подходит для каждого года. Вам больше не нужно его настраивать.
Предварительным условием является то, что понедельник - ваш первый день недели.
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)
Ответ 3
Если вы ищете противоположное, чтобы получить дату из номера недели, я нашел решение онлайн и немного изменил его:
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
Я взял formular из asapu-utilities.com/ и изменил
DateSerial(iYear, 1, ((iWeek - 1) * 7)
to
DateSerial(iYear, 1, (iWeek * 7)
Update
Похоже, что, по крайней мере, для германии формуляр работает не так, как ожидалось для високосного года 2016, поэтому я изменил его на
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
Это может быть неправильным, но мой ограниченный тест дал ожидаемые результаты:
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
Ответ 4
Если номер недели находится в A1
и году в A2
, вы можете попробовать:
A1*7+DATE(A2,1,1)
Ответ 5
Простое решение состоит в том, чтобы сделать эту формулу:
A1*7+DATE(A2,1,1)
Если он возвращает среду, просто измените формулу на:
(A1*7+DATE(A2,1,1))-2
Это будет работать только для дат в течение одного календарного года.
Ответ 6
Если A1 имеет номер недели и год как целое число 3 или 4 цифры в формате wwYY, тогда формула будет:
=INT(A1/100)*7+DATE(MOD([A1,100),1,1)-WEEKDAY(DATE(MOD(A1,100),1,1))-5
вычитание дня недели гарантирует, что вы вернете последовательный день начала недели. Используйте конечное вычитание для настройки начального дня.
Ответ 7
= (MOD (R [-1] C-1100) * 7 + ДАТА (INT (R [-1] C/100 + 2000), 1,1) -2)
yyww как данная неделя exp: неделя 51 год 2014 будет 1451
Ответ 8
Если ваш номер недели находится в A1 и год находится в A2, следующий фрагмент может дать вам даты полной недели
=$A$1*7+DATE($B$1,1,-4) through =$A$1*7+DATE($B$1,1,2)
Конечно, заполните серию от -4 до 2, и у вас будут даты, начинающиеся с воскресенья по субботу.
Надеюсь, что это поможет.