Страницы: 1
RSS
Почему формула =ГОД(СЕГОДНЯ()-A2)-1900 корректно работает?
 
Всем доброго времени суток!
Кто-нибудь понимает, почему формула =ГОД(СЕГОДНЯ()-A2)-1900 работает корректно? (в ячейке A2 - дата)
Эта формула позволяет вычислить число полных лет, которые прошли с указанной даты по сегодняшний день.
Вопрос: каким образом получается так, что эта формула всегда дает корректный результат?
(файл с небольшим примером прилагаю)
Изменено: Konstantin Zhi - 14.05.2018 20:35:19
 
Подсказка: как Excel хранит даты? И еще: для даты рождения, например, 14.05.2000 результат сегодня неверен.
Владимир
 
Цитата
sokol92 написал:
например, 14.05.2000 результат сегодня неверен
Ну почему же неверен? Смотря с какой стороны смотреть.. Это, как бы, вопрос интерпретации... Ведь неверным будет утверждение сделанное 14 мая 2010 года относительно человека родившегося в этот день (14 мая 2000) что он уже прожил 1 день...
Изменено: Konstantin Zhi - 14.05.2018 20:58:44
 
эксель хранит даты как число дней прошедших с нулевого января 1900 года, но это, на мой взгляд, ничего не объясняет..
 
=ГОД(СЕГОДНЯ()-A2)-1900
=ГОД(23328)-1900 или =ГОД(13.11.1963)-1900
=1963-1900

Что непонятно?
 
Цитата
Konstantin Zhi написал:
всегда дает корректный результат?
как уже отметил sokol92,  -не всегда и происходит это из за смещения и високосных лет. одного дня может не хватить а он нам так нужен :-)
A так, 1900 год принят за ноль  или если пос тавить 0 и отформатироать как дату , то получим 00.01.1900
Разница между двумя датами это число дней, и их переводим в полные года и вот тут можно попасть на отсутствие одного висакосного дня.  Так как не может быть 0063го года, то система выдает нам 1963, от него отнимаем наши 1900. вроде все,  
По вопросам из тем форума, личку не читаю.
 
Цитата
Konstantin Zhi написал:
Смотря с какой стороны смотреть.. Это, как бы, вопрос интерпретации
А с такими датами как быть?
Код
15.05.1960   57
14.05.1960   57
13.05.1960   57
12.05.1960   58
Допустим, для 14.05.1960 день еще не прошел, но для 13.05.1960?
Правильная формула
Код
=РАЗНДАТ(A2;СЕГОДНЯ();"y")
Изменено: Казанский - 14.05.2018 21:10:25
 
СЕГОДНЯ() в числовом формате = 43234,00
Дата в А2 в числовом формате = 19906,00
Разница = 23328,00 => переводим в дату = 13.11.1963 => извлекаем год = 1963, отнимаем 1900

Лучше использовать =РАЗНДАТ(A2; СЕГОДНЯ();"y")
 
Цитата
vikttur написал:
=ГОД(23328)-1900 или =ГОД(13.11.1963)-1900
абсолютно верно Вы все расписали, но! но при чем тут 1 июля и 13 ноября? совершенно же разные даты - нет никакой связи, или тут, как бы получается так, что не критично, что там за дата будет? хотя как же не критично? почему там получается именно дата того года, сколько на данный момент прожил человек с указанной датой рождения?
 
Цитата
БМВ написал:
не всегда и происходит это из за смещения и високосных лет
я не нашел дат, для которых эта формула дала бы некорректный результат
 
Цитата
Konstantin Zhi написал: при чем тут 1 июля и 13 ноября?
Да ни при чем.  Число дней, которое получено в результате вычитания, преобразуется в дату.
Приблизительно: 23328/365 - вот и имеем 63 года.
Цитата
БМВ написал: Так как не может быть 0063го года, то система выдает нам 1963
 
Konstantin Zhi, нагляднее всего вам это продемонстрировал Казанский, проверьте
и все из-за висакосного 2012
13.05.20117
13.05.20125
13.05.20134
13.05.20144
13.05.20153
Изменено: БМВ - 14.05.2018 21:24:38
По вопросам из тем форума, личку не читаю.
 
Цитата
Казанский написал:
но для 13.05.1960?
согласен, в этом случае - ошибка, спасибо большое, что показали мне дату, для которой эта формула ошибочно считает.
Однако, все-же, очень удивительно, что каким-то (для меня, не для тех, кто понял суть формулы) невероятным образом в 99,8% случаях формула правильно работает. Как ни крути, но я не понимаю зачем функции ГОД() "скармливать" какую-то "дату" которая получается как разница между датой рождения и сегодняшней датой и при это полученная в результате этого вычитания дата никак не связана с первоначальной...
 
Konstantin Zhi, ваша формула это примерно то же, что
Код
=ОТБР((СЕГОДНЯ()-A2)/365,25)
Пример БМВ лучше :)
 
Konstantin Zhi,
https://youtu.be/yi4_uV5O05I?t=21
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо большое! засмотрелся! ) там много серий! ) в общем и целом, понятно! Всем огромное спасибо!
 
И все же, интересно как решалась эта задача на заре становления Excel когда функции РАЗНДАТ не было (как известно, она почему то упорно не включается разработчиками во встроенную помощь). Скорее всего, формула (чтобы она корректно считала во всех случаях) была очень и очень непростая.
Изменено: Konstantin Zhi - 14.05.2018 22:00:51
 
ну если вернутся во времена без функций, то
=YEAR(TODAY()-A1+1+(YEAR(A1)-INT(YEAR(A1)/4)*4<2))-1900
По вопросам из тем форума, личку не читаю.
Страницы: 1
Читают тему
Наверх