Как рассчитать, какая дата в конкретный день года в 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
Другие вопросы по тегам