Как рассчитать, какая дата в конкретный день года в Excel?
Я нашел множество функций, чтобы определить, какой день года является конкретной датой:
Function Yearday(dat As Date) As Integer
'Purpose: does the same as day for month
'Use to access an array where the index corresponds to days
Yearday = DateDiff("d", CDate("1/1/" & Year(dat)), dat) + 1
End Function
Но я не нашел никаких функций для определения даты, основанной на дне определенного года.
Подпись функции будет выглядеть так:
Function getDateBasedOnYearAndDayOfYear(year As Integer, dayOfYear As Integer) AS Date
2 ответа
Решение
Может быть, что-то вроде этого,
Function getDateBasedOnYearAndDayOfYear(year As Integer, dayOfYear As Integer) AS Date
getDateBasedOnYearAndDayOfYear = dateserial(year, 1, 0) + dayofyear
end function
Просто создайте новую дату с первым января прошедшего года, а затем добавьте количество дней. Это действительно легко в VBA, потому что даты просто удваиваются с целой частью, представляющей количество дней с 31.12.1899.
Начните с этого:
Function getDateBasedOnYearAndDayOfYear(year As Integer, dayOfYear As Integer) As Date
Dim result As Date
result = DateSerial(year, 1, 1)
getDateBasedOnYearAndDayOfYear = result + dayOfYear - 1
End Function
Я бы, наверное, добавил проверку границ и т. Д., Т. Е. 634-й день года не имеет особого смысла.
Редактировать:
Только что протестировал против DateSerial - вам даже не нужно делать математику:
Function getDateBasedOnYearAndDayOfYear(year As Integer, dayOfYear As Integer) As Date
getDateBasedOnYearAndDayOfYear = DateSerial(year, 1, dayOfYear)
End Function