Как рассчитать количество лет в Excel: формулы для возраста, стажа и временных интервалов

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

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

Особое внимание уделим практическим примерам: расчёт возраста по дате рождения, определение стажа работы с учётом неполных месяцев, и даже финансовые расчёты с годовой амортизацией. Все формулы протестированы в Excel 2019–2023 и Excel Online, поэтому вы сможете применить их независимо от версии программы.

1. Базовый метод: функция DATEDIF для точного расчёта лет

Функция DATEDIF (от англ. DATE DIFFerence) — самый надёжный инструмент для вычисления разницы между датами в годах, месяцах или днях. Несмотря на то, что она не отображается в списке функций Excel (её добавили для совместимости с Lotus 1-2-3), она работает во всех современных версиях программы.

Синтаксис функции:

=DATEDIF(начальная_дата; конечная_дата; "Y")

Где "Y" — код для расчёта полных лет. Другие варианты:

  • 📅 "M" — полные месяцы между датами (без учёта лет)
  • 📆 "D" — полные дни между датами (без учёта месяцев и лет)
  • 📊 "YM" — месяцы с учётом лет (например, разница между 01.01.2020 и 01.03.2023 вернёт 3 месяца)
  • 📈 "MD" — дни с учётом месяцев и лет (например, разница между 15.01.2023 и 20.02.2023 вернёт 5 дней)

Пример: чтобы посчитать возраст человека, родившегося 12 мая 1990 года, на сегодняшний день, используйте:

=DATEDIF("12.05.1990"; TODAY(); "Y")

Функция TODAY() автоматически подставляет текущую дату, поэтому формула будет обновляться ежедневно.

2. Альтернативные функции: YEARFRAC и YEAR для дробных и целых лет

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

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

Параметр [базис] определяет метод расчёта (по умолчанию = 0):

БазисОписаниеПример
0 или опущенАмериканский метод (NASD): 30/360=YEARFRAC("01.01.2020"; "01.07.2020") → 0,5
1Фактическое/фактическое=YEARFRAC("01.01.2020"; "01.07.2020"; 1) → 0,5
2Фактическое/360=YEARFRAC("01.01.2020"; "01.07.2020"; 2) → 0,5
3Фактическое/365=YEARFRAC("01.01.2020"; "01.07.2020"; 3) → 0,4986
4Европейский метод: 30/360 (отличается от базиса 0)=YEARFRAC("01.01.2020"; "01.07.2020"; 4) → 0,5

Для целых лет можно использовать комбинацию функций YEAR и TODAY:

=YEAR(TODAY()) - YEAR(дата_рождения)

Однако этот метод не учитывает, прошёл ли день рождения в текущем году. Например, если сегодня 1 января 2026 года, а дата рождения — 31 декабря 1990 года, формула вернёт 34 года, хотя фактически человек ещё не отметил день рождения.

📊 Какой метод расчёта лет вы используете чаще?
DATEDIF
YEARFRAC
Ручной ввод
Другой

3. Расчёт стажа работы с учётом неполных периодов

При определении стажа работы часто требуется учитывать не только полные годы, но и месяцы/дни. Например, для начисления надбавок или отпускных. Вот универсальная формула, которая возвращает стаж в формате "X лет Y месяцев Z дней":

=DATEDIF(B2; TODAY(); "Y") & " лет " & DATEDIF(B2; TODAY(); "YM") & " мес. " & DATEDIF(B2; TODAY(); "MD") & " дн."

Где B2 — ячейка с датой приёма на работу.

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

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

Убедитесь, что дата приёма введена в формате ДД.ММ.ГГГГ|

Используйте TODAY() для автоматического обновления|

Проверьте результат на граничных датах (например, 29 февраля)|

Сравните с ручным расчётом для контрольной даты-->

4. Обработка ошибок: #ЧИСЛО!, #ЗНАЧ! и отрицательные значения

При работе с датами в Excel часто возникают ошибки, особенно если данные вводятся вручную. Рассмотрим типичные проблемы и их решения:

⚠️ Внимание: Если функция DATEDIF возвращает отрицательное значение, это означает, что конечная дата раньше начальной. Например, =DATEDIF("01.01.2026"; "01.01.2020"; "Y") вернёт -5. Чтобы избежать этого, используйте функцию АБС:

=АБС(DATEDIF(B2; TODAY(); "Y"))

Другие распространённые ошибки:

  • 🔢 #ЧИСЛО! — возникает, если разница между датами превышает допустимый диапазон (Excel поддерживает даты с 01.01.1900 по 31.12.9999).
  • 📛 #ЗНАЧ! — появляется, если ячейка содержит текст вместо даты. Проверьте формат ячейки (Формат → Ячейки → Дата).
  • #ДЕЛ/0! — если в формуле используется деление на ноль (например, при некорректном базисе в YEARFRAC).

Чтобы сделать формулы устойчивыми к ошибкам, оборачивайте их в ЕСЛИОШИБКА:

=ЕСЛИОШИБКА(DATEDIF(B2; TODAY(); "Y"); "Некорректная дата")

5. Автоматизация: динамический расчёт лет с учётом условий

В реальных задачах часто требуется не просто посчитать годы, а применить к результату дополнительную логику. Например:

  • 🎂 Выделить сотрудников, которым исполнилось 18/21/55 лет (для HR-отчётов).
  • 💼 Начислить надбавку за стаж от 5 лет (для бухгалтерии).
  • 📉 Рассчитать амортизацию оборудования по годам (для финансового учёта).

Пример формулы для определения возрастной группы:

=ЕСЛИ(DATEDIF(B2; TODAY(); "Y")<18; "Несовершеннолетний";

ЕСЛИ(DATEDIF(B2; TODAY(); "Y")<25; "Молодой специалист";

ЕСЛИ(DATEDIF(B2; TODAY(); "Y")<55; "Основной состав"; "Предпенсионный возраст")))

Для финансовых расчётов (например, амортизация по методу уменьшаемого остатка) используйте комбинацию YEARFRAC и СТЕПЕНЬ:

=Первоначальная_стоимость * (1 - Норма_амортизации)^YEARFRAC(Дата_покупки; TODAY(); 1)
Как Excel хранит даты?

Внутри Excel даты хранятся как числа, где 1 соответствует 01.01.1900, а время — как дробная часть (например, 12:00 = 0,5). Поэтому вы можете прибавлять/вычитать дни просто сложением чисел. Например, "01.01.2020"+365 вернёт 01.01.2021 (с учётом високосного года).

6. Продвинутые сценарии: расчёт лет между датами в разных форматах

Иногда даты хранятся в нестандартных форматах — например, как текст ("12.05.1990" вместо даты) или в виде отдельных колонок (день, месяц, год). В таких случаях используйте вспомогательные функции:

Сценарий 1: Дата в текстовом формате (например, "12 мая 1990"). Преобразуйте её в дату с помощью ДАТАЗНАЧ:

=DATEDIF(ДАТАЗНАЧ("12.05.1990"); TODAY(); "Y")

Сценарий 2: День, месяц и год в отдельных ячейках (A2=день, B2=месяц, C2=год):

=DATEDIF(ДАТА(C2; B2; A2); TODAY(); "Y")

Сценарий 3: Дата в формате UNIX timestamp (количество секунд с 01.01.1970). Преобразуйте её так:

=DATEDIF(ДАТА(1970;1;1)+A2/86400; TODAY(); "Y")

Где A2 — ячейка с timestamp, а 86400 — количество секунд в сутках.

7. Визуализация результатов: условное форматирование по возрасту

Чтобы быстро анализировать данные, используйте условное форматирование. Например, выделите красным сотрудников старше 50 лет, жёлтым — от 30 до 50, зелёным — младше 30:

  1. Выделите диапазон с возрастом (например, C2:C100).
  2. Перейдите в Главная → Условное форматирование → Правила выделения ячеек.
  3. Добавьте 3 правила:
    • 🔴 "Больше" → 50 → Красный фон
    • 🟡 "Между" → 30 и 50 → Жёлтый фон
    • 🟢 "Меньше" → 30 → Зелёный фон

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

=И(DЕНЬ(TODAY())=ДЕНЬ(B2); МЕСЯЦ(TODAY())=МЕСЯЦ(B2); DATEDIF(B2; TODAY(); "Y")>0)

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

Часто задаваемые вопросы

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

Замените TODAY() на ячейку с конечной датой. Например:

=DATEDIF("15.03.2010"; "20.11.2023"; "Y")

Вернёт количество полных лет между 15 марта 2010 и 20 ноября 2023 года.

Почему DATEDIF иногда возвращает неточный результат?

Функция DATEDIF учитывает полные годы. Например, разница между 31.12.2020 и 01.01.2021 составит 0 лет, несмотря на то, что прошёл всего 1 день. Если вам нужна дробная часть, используйте YEARFRAC.

Как посчитать возраст в годах и месяцах (например, "3 года 5 месяцев")?

Используйте комбинацию:

=DATEDIF(B2; TODAY(); "Y") & " г. " & DATEDIF(B2; TODAY(); "YM") & " мес."

Для корректного склонения ("год", "года", "лет") потребуется более сложная формула с ВЫБОР.

Можно ли посчитать годы в Google Таблицах?

Да, все приведённые функции (DATEDIF, YEARFRAC, TODAY) работают в Google Sheets без изменений. Синтаксис полностью идентичен.

Как учитывать високосные годы при расчёте?

Функции DATEDIF и YEARFRAC автоматически учитывают високосные годы. Например, разница между 28.02.2020 и 28.02.2021 в YEARFRAC с базисом 1 вернёт ровно 1 год, несмотря на то, что 2020-й был високосным.