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

Почему стандартное вычитание дат в Excel даёт ошибку

Вы когда-нибудь пытались просто вычесть одну дату из другой в Microsoft Excel, ожидая получить разницу в годах, но вместо этого видели странное число вроде 4567 или 12.87? Это типичная ошибка новичков. Дело в том, что Excel хранит даты не как привычные нам календарные значения, а как порядковые номера, где 1 соответствует 1 января 1900 года. Когда вы вычитаете 01.01.2020 из 01.01.2026, программа возвращает разницу в днях (1826), а не в годах.

Более того, даже если вы разделите полученное число на 365, результат будет неточным из-за високосных лет и дробных остатков. Например, разница между 1 марта 2020 и 1 марта 2026 составит 4 года, но простое деление на 365 даст ~4.0027 — а вам-то нужны целые годы или хотя бы корректные десятичные дроби. Вот почему для точных расчётов требуются специализированные функции.

В этой статье мы разберём 5 надёжных способов посчитать годы между датами — от простейших формул до продвинутых методов с учётом календарных нюансов. Вы узнаете, как:

  • 📅 Использовать скрытую функцию DATEDIF для точного подсчёта полных лет
  • 📊 Применять YEARFRAC для дробных значений (например, 2.5 года)
  • ⚡ Автоматизировать расчёты с учётом високосных годов
  • 🔄 Обрабатывать массивы дат без ручного ввода
📊 Какой способ расчёта лет в Excel вы используете чаще?
Формулы вручную
Функция DATEDIF
YEARFRAC
Другие методы

Способ 1: Функция DATEDIF — скрытый инструмент для точных лет

Функция DATEDIF (от англ. DATE DIFFerence) — это полусекретный инструмент Excel, который не отображается в списке функций, но работает во всех версиях программы, начиная с Excel 2000. Она специально создана для расчёта разницы между датами в годах, месяцах или днях. Синтаксис:

=DATEDIF(начальная_дата; конечная_дата; "единица_измерения")

Для подсчёта полных лет используйте параметр "Y" (от Year). Например, формула =DATEDIF("01.01.2020"; "15.03.2026"; "Y") вернёт 4, даже если разница между датами составляет 4 года и 2.5 месяца. Это удобно для расчёта стажа, возраста или срока службы оборудования, когда важны только целые периоды.

Обратите внимание на ключевые особенности DATEDIF:

  • 🔹 Игнорирует дробные части года (месяцы и дни)
  • 🔹 Корректно обрабатывает високосные годы
  • 🔹 Работает даже если конечная дата раньше начальной (возвращает ошибку #ЧИСЛО!)

Убедитесь, что обе даты введены как даты (а не текст)|Проверьте порядок дат (начальная ≤ конечной)|Используйте формат ячеек "Общий" или "Числовой" для результата-->

⚠️ Внимание: Если в ячейке с датой стоит апостроф (например, '01.01.2020), Excel воспринимает её как текст. Чтобы исправить, выделите ячейку, нажмите F2, затем Enter — программа автоматически преобразует значение в дату.
Параметр DATEDIF Описание Пример результата
"Y" Полные годы между датами =DATEDIF("01.01.2020"; "31.12.2023"; "Y")3
"M" Полные месяцы (игнорирует годы и дни) =DATEDIF("01.01.2023"; "15.03.2023"; "M")2
"D" Полные дни между датами =DATEDIF("01.01.2023"; "10.01.2023"; "D")9
"YM" Месяцы без учёта лет =DATEDIF("01.01.2020"; "15.03.2026"; "YM")3

Способ 2: YEARFRAC — для дробных лет с высокой точностью

Если вам нужна не целая разница в годах, а точная дробь (например, 2.75 года для расчёта амортизации или процентов), используйте функцию YEARFRAC. Она возвращает разницу между двумя датами в виде десятичной дроби, учитывая реальное количество дней в году. Синтаксис:

=YEARFRAC(начальная_дата; конечная_дата; [базис])

Третий аргумент [базис] определяет метод расчёта:

  • 📌 0 или опущен — американский метод (NASD), 30/360
  • 📌 1 — фактическое количество дней / фактическое количество дней в году
  • 📌 2 — фактическое / 360
  • 📌 3 — фактическое / 365

Для большинства задач подходит базис=1, так как он учитывает високосные годы. Например, формула =YEARFRAC("01.01.2020"; "01.07.2023"; 1) вернёт 3.5 — то есть 3.5 года. Это незаменимо для финансовых расчётов, где важна точность до дня.

⚠️ Внимание: Функция YEARFRAC может давать неожиданные результаты при пересечении границ високосных годов. Например, разница между 28.02.2020 и 28.02.2021 составит 1 год, но если использовать базис=3, результат будет ~1.0027 из-за дополнительного дня в 2020 году.

Способ 3: Простая формула для целых лет (без функций)

Если вам не нужна высокая точность и достаточно целых лет, можно обойтись без специализированных функций. Достаточно вычесть годы одной даты из другой и скорректировать результат с учётом месяцев и дней:

=ЕСЛИ(ИЛИ(МЕСЯЦ(конечная_дата)<МЕСЯЦ(начальная_дата); И(МЕСЯЦ(конечная_дата)=МЕСЯЦ(начальная_дата); ДЕНЬ(конечная_дата)<ДЕНЬ(начальная_дата))); ГОД(конечная_дата)-ГОД(начальная_дата)-1; ГОД(конечная_дата)-ГОД(начальная_дата))

Разберём, как это работает:

  1. Сначала сравниваются месяцы: если месяц конечной даты раньше, чем у начальной, вычитаем 1 год.
  2. Если месяцы совпадают, проверяем дни: если день конечной даты меньше, тоже вычитаем 1.
  3. В остальных случаях возвращаем разницу лет без корректировки.

Пример: для дат 15.03.2020 и 10.03.2026 формула вернёт 3 (так как 10 марта < 15 марта), хотя реальная разница — 4 года минус 5 дней. Этот метод подходит для юридических расчётов, где важны полные периоды (например, стаж для пенсии).

Почему формула даёт неточный результат для 29 февраля

Если начальная дата — 29.02.2020 (високосный год), а конечная — 28.02.2026, формула вернёт на 1 год меньше, так как 28.02 < 29.02. Чтобы исправить, добавьте проверку на високосность:

=ЕСЛИ(И(ДЕНЬ(начальная_дата)=29; МЕСЯЦ(начальная_дата)=2; ДЕНЬ(конечная_дата)=28; МЕСЯЦ(конечная_дата)=2); ГОД(конечная_дата)-ГОД(начальная_дата); [основная формула])

Способ 4: Расчёт лет с учётом текущей даты (динамическая формула)

Часто требуется посчитать годы между фиксированной датой (например, датой рождения) и сегодняшним днём. Для этого используйте функцию СЕГОДНЯ() (или TODAY() в английской версии). Пример формулы для расчёта возраста:

=DATEDIF(B2; СЕГОДНЯ(); "Y")

где B2 — ячейка с датой рождения.

Особенности динамических расчётов:

  • 🔄 Результат будет автоматически обновляться при каждом открытии файла.
  • 📅 Для фиксации даты на определённый момент (например, на 31.12.2023) замените СЕГОДНЯ() на конкретную дату.
  • ⚡ Чтобы отобразить годы и месяцы, комбинируйте DATEDIF с текстом:
    =DATEDIF(B2; СЕГОДНЯ(); "Y") & " лет, " & DATEDIF(B2; СЕГОДНЯ(); "YM") & " мес."

Важно: Функция СЕГОДНЯ() не обновляется в реальном времени — только при пересчёте листа (например, после ввода данных или нажатия F9). Если вам нужна секундная точность, используйте VBA-скрипты.

Способ 5: Массовый расчёт лет для большого диапазона дат

Если вам нужно посчитать разницу в годах для сотен или тысяч строк (например, для списка сотрудников или оборудования), используйте протягивание формул или массивные вычисления. Алгоритм действий:

  1. Введите начальные даты в столбце A (например, A2:A100).
  2. Введите конечные даты в столбце B (или используйте СЕГОДНЯ() для динамического расчёта).
  3. В ячейку C2 введите формулу (например, =DATEDIF(A2; B2; "Y")).
  4. Дважды кликните по правому нижнему углу ячейки C2 — формула автоматически скопируется на весь диапазон.

Для ускорения работы с большими массивами:

  • 🚀 Преобразуйте диапазон в умную таблицу (Ctrl + T), чтобы формулы автоматически применялись к новым строкам.
  • 📈 Используйте условное форматирование, чтобы выделить ячейки с разницей более 5 лет (например, для анализа устаревшего оборудования).
  • 🔍 Для фильтрации результатов добавьте функцию ЕСЛИ:
    =ЕСЛИ(DATEDIF(A2; B2; "Y")>5; "Срок истёк"; "Активно")
⚠️ Внимание: При массовых расчётах избегайте вложенных функций ЕСЛИ глубиной более 7 уровней — это замедляет работу Excel. Вместо этого используйте ВПР или ИНДЕКС/ПОИСКПОЗ для категоризации результатов.

Типичные ошибки и как их избежать

Даже опытные пользователи Excel допускают ошибки при работе с датами. Вот наиболее распространённые проблемы и их решения:

Ошибка Причина Решение
#ИМЯ? Опечатка в названии функции (например, DATEDIF написано как DATEIF) Проверьте синтаксис. Функция чувствительна к регистру в некоторых версиях Excel.
#ЧИСЛО! Начальная дата позже конечной Поменяйте даты местами или используйте ЕСЛИОШИБКА:
Некорректный результат для 29 февраля Excel не распознаёт 29.02 в невисокосные годы Используйте ДАТА() для приведения дат к корректному формату:
=ДАТА(ГОД(А2); 3; 1)-1
(заменяет 29.02 на 28.02 в невисокосные годы)
Результат в формате даты (например, 01.01.1905) Ячейка с результатом имеет формат "Дата" Выделите ячейку → Формат ячеек → выберите "Общий" или "Числовой".

Ещё одна распространённая проблема — разные форматы дат в источниках. Например, если одна дата введена как ДД.ММ.ГГГГ, а другая как ММ/ДД/ГГГГ, Excel может воспринимать их как текст. Чтобы исправить:

  1. Выделите проблемные ячейки.
  2. Перейдите в Данные → Текст по столбцам → Готово.
  3. Установите формат ячеек как Дата.

FAQ: Частые вопросы о расчёте лет в Excel

Как посчитать годы между датами, если одна из них пустая?

Используйте функцию ЕСЛИ для проверки заполненности ячейки:

=ЕСЛИ(ИЛИ(A2=""; B2=""); ""; DATEDIF(A2; B2; "Y"))

Если хотя бы одна из ячеек A2 или B2 пустая, формула вернёт пустое значение.

Можно ли посчитать годы с учётом только рабочих дней?

Да, но для этого потребуется комбинация функций DATEDIF и ЧИСТРАБДНИ (или NETWORKDAYS в английской версии). Пример:

=ЧИСТРАБДНИ(A2; B2)/250

Здесь 250 — среднее количество рабочих дней в году (может варьироваться в зависимости от страны).

Как округлить результат YEARFRAC до 2 знаков после запятой?

Используйте функцию ОКРУГЛ:

=ОКРУГЛ(YEARFRAC(A2; B2; 1); 2)

Для округления в большую сторону замените ОКРУГЛ на ОКРУГЛВВЕРХ.

Почему DATEDIF не работает в Excel Online?

Функция DATEDIF поддерживается во всех версиях Excel, включая Excel Online и Excel для Mac. Если она не работает, проверьте:

  • Языковые настройки (в английской версии используйте запятые вместо точек с запятой).
  • Формат ячеек (даты должны быть в формате даты, а не текста).
  • Наличие скрытых символов (например, пробелов перед датой).
Как посчитать годы между датами в Google Таблицах?

В Google Sheets тоже есть DATEDIF, но с другим синтаксисом:

=DATEDIF(A2; B2; "Y")

Также можно использовать =YEAR(B2)-YEAR(A2) с корректировкой на месяцы и дни, как в способе 3.