Как в Excel посчитать количество лет между датами: полное руководство с формулами

Расчёт количества лет между двумя датами — одна из самых востребованных задач в Microsoft Excel. Будь то расчёт возраста сотрудников, стажа работы, срока действия договоров или гарантийных обязательств — без точного вычисления разницы в годах не обойтись. Казалось бы, что может быть проще: вычесть одну дату из другой и разделить на 365? Но такой подход даёт погрешность из-за високосных лет и не учитывает месяцы/дни. К счастью, в Excel есть специализированные функции, которые справляются с задачей на 100%.

Многие пользователи сталкиваются с тем, что стандартные формулы типа =ГОД(СЕГОДНЯ())-ГОД(A1) дают неточный результат. Например, если сегодня 1 января 2026, а дата рождения — 31 декабря 2020, то по этой формуле человек будет "старше" на целый год, хотя на самом деле ему ещё только 3 года. В этой статье мы разберём 5 надёжных способов посчитать количество полных лет в Excel, включая скрытую функцию DATEDIF, универсальную YEARFRAC и даже метод с использованием Power Query для массовой обработки данных.

Вы узнаете:

  • 🔹 Почему простая разница дат в годах часто врут и как это исправить
  • 🔹 Как использовать функцию DATEDIF — самый точный метод, которого нет в справочнике Excel
  • 🔹 В чём разница между YEARFRAC и DATEDIF, и когда какой способ выбрать
  • 🔹 Как автоматически обновлять возраст при изменении текущей даты
  • 🔹 Как посчитать годы с учётом месяца и дня (например, для стажа "2 года 3 месяца")
📊 Как часто вам нужно считать разницу в годах в Excel?
Ежедневно
Раз в неделю
Редико
Никогда не пользовался

1. Почему простая формула =ГОД(СЕГОДНЯ())-ГОД(A1) даёт ошибку

На первый взгляд, логика проста: вычесть год начальной даты из года текущей даты. Например, если в ячейке A1 указана дата рождения 15.05.1990, а сегодня 20.06.2026, то формула =ГОД(СЕГОДНЯ())-ГОД(A1) вернёт 34. Но это не всегда корректно!

Проблема в том, что формула не учитывает месяц и день. Если сегодня 1 января 2026, а дата в A131 декабря 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. Если текущий месяц > месяца начальной даты И текущий день >= дня начальной даты → полные годы.
  2. Если месяцы равны, но день текущий >= дня начального → тоже полные годы.
  3. Во всех остальных случаях вычитаем 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 — инструмент для обработки и трансформации данных.

Пошаговая инструкция:

  1. Выделите таблицу с датами.
  2. Перейдите на вкладку Данные → Из таблицы/диапазона (или Data → Get Data → From Table/Range).
  3. В открывшемся редакторе Power Query добавьте новый столбец: Добавить столбец → Пользовательский.
  4. Введите формулу:
    = Date.From(DateTime.LocalNow()) - [ВашаДата]

    где [ВашаДата] — название столбца с исходными датами.

  5. Преобразуйте результат в годы, добавив ещё один столбец:
    = Duration.Days([Custom]) / 365.25

    (делим на 365.25 для учёта високосных лет).

  6. Сохраните и загрузите данные обратно в 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).