Расчёт количества лет между двумя датами в 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 года, хотя фактически человек ещё не отметил день рождения.
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:
- Выделите диапазон с возрастом (например,
C2:C100).- Перейдите в
Главная → Условное форматирование → Правила выделения ячеек.- Добавьте 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-й был високосным.