Function Возраст(Дата As Date) As Date Возраст=DateDiff("yyyy", Дата, Now) End function
[/vba] Вопрос состоит в следующем результатом приведенного кода для человека дата рождения у которого 01.08.1979 будет 40 лет. Подскажите в чем ошибка.
Подскажите пожалуйста, [vba]
Код
Function Возраст(Дата As Date) As Date Возраст=DateDiff("yyyy", Дата, Now) End function
[/vba] Вопрос состоит в следующем результатом приведенного кода для человека дата рождения у которого 01.08.1979 будет 40 лет. Подскажите в чем ошибка.Sashagor1982
Это не Ваша ошибка, а особенность работы DateDiff — она вычитает именно годы, а не даты. То есть нужно ввести проверку, был ли уже день рождения в текущем году и если нет, уменьшать возраст на 1.
Это не Ваша ошибка, а особенность работы DateDiff — она вычитает именно годы, а не даты. То есть нужно ввести проверку, был ли уже день рождения в текущем году и если нет, уменьшать возраст на 1.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
[p.s.]Если же хотите решить непременно кодом VBA, то тогда здесь посмотрите: http://www.excelworld.ru/forum/10-39277-1 [/p.s.] Соответственно, моя версия функции (следуя материалу ссылки): [vba]
Код
Function Возраст(Дата As Date) As Date Возраст = Evaluate("DATEDIF(" & CLng(Int(Дата)) & "," & CLng(Int(Now)) & ",""Y"")") End Function
[p.s.]Если же хотите решить непременно кодом VBA, то тогда здесь посмотрите: http://www.excelworld.ru/forum/10-39277-1 [/p.s.] Соответственно, моя версия функции (следуя материалу ссылки): [vba]
Код
Function Возраст(Дата As Date) As Date Возраст = Evaluate("DATEDIF(" & CLng(Int(Дата)) & "," & CLng(Int(Now)) & ",""Y"")") End Function
При сравнении 31 декабря с 1 января следующего года функция DateDiff для года ("yyyy") возвращает значение 1, не смотря на то, что разница составляет всего один день.
Можно вот так например [vba]
Код
Function Возраст(Дата As Date) As Date Возраст = DateDiff("yyyy", Дата, Now) + (Now < CDate(Format(Дата, "D.M.") & Year(Now))) End Function
При сравнении 31 декабря с 1 января следующего года функция DateDiff для года ("yyyy") возвращает значение 1, не смотря на то, что разница составляет всего один день.
Можно вот так например [vba]
Код
Function Возраст(Дата As Date) As Date Возраст = DateDiff("yyyy", Дата, Now) + (Now < CDate(Format(Дата, "D.M.") & Year(Now))) End Function