Расчёт количества лет между двумя датами — одна из самых востребованных задач в Microsoft Excel. Будь то расчёт возраста сотрудников, стажа работы, срока действия договоров или гарантийных обязательств — без точного вычисления разницы в годах не обойтись. Казалось бы, что может быть проще: вычесть одну дату из другой и разделить на 365? Но такой подход даёт погрешность из-за високосных лет и не учитывает месяцы/дни. К счастью, в Excel есть специализированные функции, которые справляются с задачей на 100%.
Многие пользователи сталкиваются с тем, что стандартные формулы типа =ГОД(СЕГОДНЯ())-ГОД(A1) дают неточный результат. Например, если сегодня 1 января 2026, а дата рождения — 31 декабря 2020, то по этой формуле человек будет "старше" на целый год, хотя на самом деле ему ещё только 3 года. В этой статье мы разберём 5 надёжных способов посчитать количество полных лет в Excel, включая скрытую функцию DATEDIF, универсальную YEARFRAC и даже метод с использованием Power Query для массовой обработки данных.
Вы узнаете:
- 🔹 Почему простая разница дат в годах часто врут и как это исправить
- 🔹 Как использовать функцию DATEDIF — самый точный метод, которого нет в справочнике Excel
- 🔹 В чём разница между
YEARFRACиDATEDIF, и когда какой способ выбрать - 🔹 Как автоматически обновлять возраст при изменении текущей даты
- 🔹 Как посчитать годы с учётом месяца и дня (например, для стажа "2 года 3 месяца")
1. Почему простая формула =ГОД(СЕГОДНЯ())-ГОД(A1) даёт ошибку
На первый взгляд, логика проста: вычесть год начальной даты из года текущей даты. Например, если в ячейке A1 указана дата рождения 15.05.1990, а сегодня 20.06.2026, то формула =ГОД(СЕГОДНЯ())-ГОД(A1) вернёт 34. Но это не всегда корректно!
Проблема в том, что формула не учитывает месяц и день. Если сегодня 1 января 2026, а дата в A1 — 31 декабря 2020, то по факту прошло всего 3 года и 1 день, но Excel покажет 4. Это критично для расчёта стажа, возраста для медицинских справок или сроков действия документов.
⚠️ Внимание: Если вы используете эту формулу для расчёта возраста сотрудников в кадровых документах, ошибка даже в 1 год может привести к проблемам с трудовой инспекцией. Всегда проверяйте результат на граничных датах (например, 29 февраля или 31 декабря).
Ещё один подводный камень — високосные годы. Например, разница между 29.02.2020 и 29.02.2026 составляет ровно 4 года, но если использовать простую разницу в днях (=СЕГОДНЯ()-A1), а затем делить на 365, результат будет неточным из-за лишнего дня в феврале 2020 и 2026.
2. Способ 1: Скрытая функция DATEDIF — самый точный метод
Функция DATEDIF (от англ. DATE DIFFerence) специально создана для расчёта разницы между датами в годах, месяцах или днях. Удивительно, но её нет в стандартном списке функций Excel (она не отображается в Вставка → Функция), но она работает во всех версиях, начиная с Excel 2000.
Синтаксис функции:
=DATEDIF(начальная_дата; конечная_дата; "единица_измерения")
Для расчёта полных лет используйте параметр "Y":
=DATEDIF(A1; СЕГОДНЯ(); "Y")
Примеры работы:
- 📅 Если в
A1дата 15.06.2000, а сегодня 10.06.2026, формула вернёт 23 (полных года ещё не прошло). - 📅 Если сегодня 15.06.2026, то результат будет 24.
- 📅 Для даты 29.02.2020 и текущей даты 28.02.2026 функция вернёт 3 (несмотря на то, что 2026 — високосный).
⚠️ Внимание: Функция DATEDIF учитывает полные годы. Если на момент расчёта не наступил день рождения (или другая годовщина), результат будет на 1 меньше ожидаемого. Это правильно с точки зрения математики, но может сбивать с толку.
Чтобы получить разницу в годах с учётом месяцев и дней (например, "2 года 3 месяца 5 дней"), комбинируйте параметры:
=DATEDIF(A1; СЕГОДНЯ(); "Y") & " лет, " & DATEDIF(A1; СЕГОДНЯ(); "YM") & " мес., " & DATEDIF(A1; СЕГОДНЯ(); "MD") & " дн."
Введите тестовую дату в ячейку A1 (например, 31.12.2020)
Используйте формулу =DATEDIF(A1; СЕГОДНЯ(); "Y")
Сравните результат с ручным подсчётом
Проверьте граничные случаи (29 февраля, 31 декабря)-->
3. Способ 2: Функция YEARFRAC для дробных лет
Если вам нужно получить разницу в годах с дробной частью (например, 2.5 года вместо 2 лет 6 месяцев), используйте функцию YEARFRAC. Она возвращает количество лет между двумя датами в виде десятичной дроби.
Синтаксис:
=YEARFRAC(начальная_дата; конечная_дата; [базис])
Параметр [базис] определяет способ расчёта (по умолчанию = 0):
- 🔢
0или опущен — американский метод (NASD), 30/360 - 🔢
1— фактический/фактический - 🔢
2— фактический/360 - 🔢
3— фактический/365 - 🔢
4— европейский метод, 30/360
Пример для расчёта стажа в дробных годах:
=YEARFRAC(A1; СЕГОДНЯ(); 1)
Если в A1 дата 01.07.2020, а сегодня 01.01.2026, результат будет примерно 3.5 (3 года и 6 месяцев).
| Базис | Описание | Пример (01.01.2020 — 01.07.2026) |
|---|---|---|
0 |
30/360 (NASD) | 4.50 |
1 |
Фактический/фактический | 4.50 |
2 |
Фактический/360 | 4.52 |
3 |
Фактический/365 | 4.49 |
Важно: Для кадрового учёта или медицинских справок используйте базис 1 (фактический/фактический), так как он наиболее точен и соответствует законодательным требованиям.
4. Способ 3: Комбинация функций ГОД, МЕСЯЦ, ДЕНЬ для точного расчёта
Если вам нужно учитывать не только годы, но и месяцы/дни (например, для формулировки "2 года 3 месяца 15 дней"), используйте комбинацию функций ГОД, МЕСЯЦ и ДЕНЬ:
=ЕСЛИ(И(МЕСЯЦ(СЕГОДНЯ())>МЕСЯЦ(A1); ДЕНЬ(СЕГОДНЯ())>=ДЕНЬ(A1));
ГОД(СЕГОДНЯ())-ГОД(A1);
ЕСЛИ(И(МЕСЯЦ(СЕГОДНЯ())=МЕСЯЦ(A1); ДЕНЬ(СЕГОДНЯ())>=ДЕНЬ(A1));
ГОД(СЕГОДНЯ())-ГОД(A1);
ГОД(СЕГОДНЯ())-ГОД(A1)-1))
Эта формула проверяет:
- Если текущий месяц > месяца начальной даты И текущий день >= дня начальной даты → полные годы.
- Если месяцы равны, но день текущий >= дня начального → тоже полные годы.
- Во всех остальных случаях вычитаем 1 год.
Для вывода полного стажа с месяцами и днями используйте:
=DATEDIF(A1; СЕГОДНЯ(); "Y") & " лет, " &
DATEDIF(A1; СЕГОДНЯ(); "YM") & " мес., " &
DATEDIF(A1; СЕГОДНЯ(); "MD") & " дн."
5. Способ 4: Автоматическое обновление возраста с функцией СЕГОДНЯ()
Если вы рассчитываете возраст или стаж, который должен автоматически обновляться при открытии файла, обязательно используйте функцию СЕГОДНЯ() (или TODAY() в английской версии). Она возвращает текущую дату и пересчитывается при каждом открытии книги или изменении ячеек.
Примеры:
- 🔄
=DATEDIF(A1; СЕГОДНЯ(); "Y")— полные годы на сегодня. - 🔄
=YEARFRAC(A1; СЕГОДНЯ(); 1)— дробные годы. - 🔄
=ГОД(СЕГОДНЯ())-ГОД(A1)— некорректно (см. раздел 1).
Если вам нужно зафиксировать дату расчёта (например, на отчётную дату), замените СЕГОДНЯ() на конкретную дату в формате ДД.ММ.ГГГГ или ссылку на ячейку с датой.
⚠️ Внимание: ФункцияСЕГОДНЯ()является летучей (volatile). Это значит, что она пересчитывается при любом изменении в книге, даже если оно не связано с датами. В больших файлах это может замедлять работу. Если скорость критична, используйтеPower Query(см. следующий раздел).
6. Способ 5: Power Query для массового расчёта лет
Если вам нужно посчитать количество лет для тысяч строк (например, возраст всех клиентов в базе), ручной ввод формул неэффективен. В этом случае используйте Power Query — инструмент для обработки и трансформации данных.
Пошаговая инструкция:
- Выделите таблицу с датами.
- Перейдите на вкладку
Данные → Из таблицы/диапазона(илиData → Get Data → From Table/Range). - В открывшемся редакторе Power Query добавьте новый столбец:
Добавить столбец → Пользовательский. - Введите формулу:
= Date.From(DateTime.LocalNow()) - [ВашаДата]где
[ВашаДата]— название столбца с исходными датами. - Преобразуйте результат в годы, добавив ещё один столбец:
= Duration.Days([Custom]) / 365.25(делим на 365.25 для учёта високосных лет).
- Сохраните и загрузите данные обратно в Excel.
Power Query удобен тем, что:
- 🔧 Расчёты выполняются один раз при загрузке, не нагружая файл.
- 🔄 Легко обновлять данные по кнопке
Обновить все. - 📊 Можно добавлять дополнительные столбцы (например, категорию возраста: "до 18", "18-35" и т.д.).
Как обработать ошибки в датах (например, будущие даты)?
В Power Query добавьте шаг фильтрации перед расчётом:
1. Выделите столбец с датами.
2. Нажмите Главная → Сохранить строки → Сохранить строки по условию.
3. Укажите условие: [Дата] <= Date.From(DateTime.LocalNow()).
Это удалит все "будущие" даты, которые могли бы вызвать ошибку.
7. Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчёте лет. Вот самые распространённые:
- 🚫 Игнорирование високосных лет: Деление разницы в днях на 365 даёт погрешность. Всегда используйте
DATEDIFилиYEARFRAC. - 🚫 Неучёт текущей даты: Если в формуле жёстко прописана дата (например,
31.12.2026), она не будет обновляться. ИспользуйтеСЕГОДНЯ(). - 🚫 Округление в меньшую сторону: Функция
ОКРУГЛВНИЗможет "съесть" год, если дата ещё не наступила. Для кадрового учёта это недопустимо. - 🚫 Неправильный формат ячеек: Если дата в ячейке отображается как текст (выровнена по левому краю), формулы не сработают. Преобразуйте текст в дату с помощью
ДАТАЗНАЧ().
Чтобы проверить корректность расчётов, используйте тестовые даты:
- 📌 31.12.2020 → должна давать разницу в 3 года на 01.01.2026.
- 📌 29.02.2020 → должна корректно обрабатываться в високосный 2026 год.
- 📌 15.06.2000 → на 14.06.2026 должно быть 23 года, на 15.06.2026 — 24.
FAQ: Ответы на частые вопросы
Как посчитать количество лет между двумя конкретными датами, а не до сегодня?
Замените СЕГОДНЯ() на ячейку с конечной датой. Например:
=DATEDIF(A1; B1; "Y")
где A1 — начальная дата, B1 — конечная.
Почему DATEDIF иногда возвращает отрицательное число?
Это происходит, если начальная дата позже конечной. Например, если в A1 дата 01.01.2026, а сегодня 2026 год, результат будет отрицательным. Используйте проверку:
=ЕСЛИ(A1>СЕГОДНЯ(); "Дата в будущем"; DATEDIF(A1; СЕГОДНЯ(); "Y"))
Как посчитать возраст в годах и месяцах для детского сада (например, "2 года 6 месяцев")?
Используйте комбинацию:
=DATEDIF(A1; СЕГОДНЯ(); "Y") & " г. " & DATEDIF(A1; СЕГОДНЯ(); "YM") & " мес."
Для вывода без нулевых значений (например, "2 г." вместо "2 г. 0 мес."):
=DATEDIF(A1; СЕГОДНЯ(); "Y") & " г." &
ЕСЛИ(DATEDIF(A1; СЕГОДНЯ(); "YM")>0; " " & DATEDIF(A1; СЕГОДНЯ(); "YM") & " мес."; "")
Можно ли посчитать годы с учётом только полных месяцев (например, для страхового стажа)?
Да, используйте параметр "YM" в DATEDIF для проверки полных месяцев:
=ЕСЛИ(DATEDIF(A1; СЕГОДНЯ(); "YM")=0; DATEDIF(A1; СЕГОДНЯ(); "Y"); DATEDIF(A1; СЕГОДНЯ(); "Y")+1)
Эта формула добавляет 1 год, если прошло хотя бы 12 полных месяцев с последней годовщины.
Как автоматически обновлять возраст в Google Таблицах?
В Google Sheets работают те же функции, но с английским синтаксисом:
=DATEDIF(A1; TODAY(); "Y")
Для дробных лет:
=YEARFRAC(A1; TODAY(); 1)
Обратите внимание, что в Google Таблицах функция DATEDIF документирована официально (в отличие от Excel).