Для конкретного года, вы можете сделать это следующим образом:
DateAdd("ww", WeekNumber - 1, DateSerial(2017, 1, 5))
И проверить:
Debug.Print Format(DateAdd("ww", WeekNumber - 1, DateSerial(YearNumber, 1, 5)), "ddd d MMM yy")
Если другие ищут в этом и Дон» t хочет четверг или не работает в 2017 году:
изменить 5 в соответствии с вашими потребностями!
Или используйте ниже функции GetDayFromWeekNumber
код, чтобы проверить его:
Sub test()
Debug.Print Format(GetDayFromWeekNumber(2017, 1, 4), "ddd d MMM yyyy")
End Sub
И общая функция GetDayFromWeekNumber
:
Public Function GetDayFromWeekNumber(InYear As Integer, _
WeekNumber As Integer, _
Optional DayInWeek1Monday7Sunday As Integer = 1) As Date
Dim i As Integer: i = 1
If DayInWeek1Monday7Sunday < 1 Or DayInWeek1Monday7Sunday > 7 Then
MsgBox "Please input between 1 and 7 for the argument :" & vbCrLf & _
"DayInWeek1Monday7Sunday!", vbOKOnly + vbCritical
'Function will return 30/12/1899 if you don't use a good DayInWeek1Monday7Sunday
Exit Function
Else
End If
Do While Weekday(DateSerial(InYear, 1, i), vbMonday) <> DayInWeek1Monday7Sunday
i = i + 1
Loop
GetDayFromWeekNumber = DateAdd("ww", WeekNumber - 1, DateSerial(InYear, 1, i))
End Function
Если 'C13 = 1' и' C14 = 2017' (первую неделю 2017 года), ваша формула возвращает '29 дек 2016'. Это то, что вы хотите? –
Поскольку это не было стабильным в отношении того, в каком году вы его используете, я внедрил его с надлежащей рабочей функцией! ;) – R3uK