Расчет разницы между датами в годах и месяцах — одна из самых востребованных задач в Microsoft Excel и Google Таблицах. Без этого не обойтись при анализе стажа сотрудников, сроков проектов, возраста клиентов или амортизации оборудования. Казалось бы, что может быть проще: вычесть одну дату из другой? Но на практике пользователи сталкиваются с массой нюансов: как учесть неполные месяцы, почему формула РАЗНДАТ выдает ошибку #ИМЯ?, или как получить результат в формате "2 года 5 месяцев 18 дней" вместо сухих цифр.
В этой статье вы найдете 5 проверенных способов рассчитать разницу между датами — от базовых функций до продвинутых комбинаций. Мы разберем, как работать с неполными периодами, избегать ошибок при копировании формул и даже автоматизировать процесс с помощью Power Query. А в конце — бонус: готовая таблица с формулами для копирования и FAQ по типичным проблемам.
Если вам нужно срочно получить результат — переходите к разделу "Готовые формулы для копирования". Для глубокого понимания читайте статью полностью: здесь нет воды, только практические примеры и уникальные приемы, которых нет в стандартных руководствах (например, как учитывать високосные годы при расчете месяцев).
1. Функция DATEDIF (РАЗНДАТ): скрытый инструмент Excel
Функция DATEDIF (или РАЗНДАТ в русской версии) — это полусекретный инструмент Excel, которого нет в списке мастер-функций. Она появилась еще в Lotus 1-2-3 и была сохранена для совместимости, но до сих пор остается самой точной для расчета разницы между датами.
Синтаксис функции:
=DATEDIF(начальная_дата; конечная_дата; единица_измерения)
Где единица_измерения может принимать значения:
- 📅 "Y" — полные годы между датами
- 📆 "M" — полные месяцы (без учета годов)
- 🕒 "D" — дни (без учета месяцев и лет)
- 📊 "YM" — месяцы с вычетом полных лет
- 📈 "MD" — дни с вычетом полных месяцев и лет
- 🔢 "YD" — дни с вычетом полных лет (игнорирует месяцы)
Пример: чтобы узнать, сколько полных лет и месяцев прошло с 15.03.2018 по 20.11.2023, используйте две формулы:
=DATEDIF("15.03.2018"; "20.11.2023"; "Y") // Вернет 5 (полных лет)
=DATEDIF("15.03.2018"; "20.11.2023"; "YM") // Вернет 8 (месяцев сверх полных лет)
⚠️ Внимание: Если конечная дата раньше начальной,DATEDIFвернет ошибку#ЧИСЛО!. Чтобы избежать этого, используйте функциюЕСЛИОШИБКА:=ЕСЛИОШИБКА(DATEDIF(A1; B1; "Y"); "Дата окончания раньше начала")
2. Комбинация функций для результата "X лет Y месяцев"
Часто требуется получить разницу в формате "3 года 2 месяца", а не отдельные числа. Для этого комбинируем DATEDIF с текстовыми функциями:
=DATEDIF(A1; B1; "Y") & " год(а) " & DATEDIF(A1; B1; "YM") & " месяц(ев)"
Но этот способ не учитывает склонение слов. Для корректного отображения используйте вложенную функцию ВЫБОР:
=DATEDIF(A1;B1;"Y") & " " & ВЫБОР(DATEDIF(A1;B1;"Y");"год";"года";"год";"года";"лет") &
" " & DATEDIF(A1;B1;"YM") & " " & ВЫБОР(DATEDIF(A1;B1;"YM");"месяц";"месяца";"месяцев";"месяца";"месяцев")
Для Google Таблиц замените ВЫБОР на CHOSE (английская версия функции).
Убедитесь, что ячейки с датами отформатированы как Дата (не текст!)
Проверьте порядок дат (начальная ≤ конечной)
Для точного расчета используйте DATEDIF с параметром "MD" для дней
Тестируйте формулу на крайних случаях (например, 29 февраля)-->
3. Функция YEARFRAC: расчет в долях года
Если вам нужна разница между датами в годах с десятичной точностью (например, для финансовых расчетов), используйте YEARFRAC:
=YEARFRAC(начальная_дата; конечная_дата; [базис])
Параметр [базис] определяет метод расчета:
- 📌
0или опущено — американский метод (NASD) 30/360 - 📌
1— фактический/фактический - 📌
2— фактический/360 - 📌
3— фактический/365 - 📌
4— европейский метод 30/360
Пример: расчет стажа в годах для премирования:
=YEARFRAC("01.07.2020"; СЕГОДНЯ(); 1)
Вернет значение типа 3.416 (3 года и ~5 месяцев).
⚠️ Внимание:YEARFRACможет давать неточности при расчете с 29 февраля. Для критичных вычислений (например, процентов по кредиту) используйте базис1(фактический/фактический).
4. Альтернативные способы: без DATEDIF
Если DATEDIF по какой-то причине недоступна (например, в некоторых локализациях Excel), используйте комбинацию стандартных функций:
Для полных лет:
=ЦЕЛОЕ((B1-A1)/365,25)
Где 365,25 — среднее количество дней в году с учетом високосных.
Для полных месяцев:
=ЦЕЛОЕ((ГОД(B1)-ГОД(A1))*12+МЕСЯЦ(B1)-МЕСЯЦ(A1))
Для дней (с учетом месяцев и лет):
=B1-ДАТА(ГОД(B1); МЕСЯЦ(B1)-DATEDIF(A1;B1;"M"); ДЕНЬ(A1))
Почему 365.25, а не 365?
Средняя продолжительность года по григорианскому календарю — 365.2425 дней (учитывает високосные года, кроме лет, кратных 100, но не 400). Для упрощенных расчетов хватает 365.25, но для финансовых вычислений лучше использовать точные календарные методы.
5. Расчет с учетом рабочих дней
Если нужно посчитать разницу в рабочих днях (исключая выходные и праздники), используйте функцию ЧИСТРАБДНИ:
=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])
Для расчета в рабочих месяцах (20 рабочих дней = ~1 месяц) используйте формулу:
=ЧИСТРАБДНИ(A1; B1)/20
Пример с учетом российских праздников (ячейки D1:D10 содержат даты праздников):
=ЧИСТРАБДНИ("01.01.2023"; "31.12.2023"; D1:D10)/20
| Задача | Формула | Пример результата |
|---|---|---|
| Полные годы | =DATEDIF(A1;B1;"Y") |
5 |
| Полные месяцы | =DATEDIF(A1;B1;"M") |
65 |
| Годы с десятичной частью | =YEARFRAC(A1;B1;1) |
5.67 |
| Текстовый формат | =DATEDIF(A1;B1;"Y") & "г " & DATEDIF(A1;B1;"YM") & "м" |
5г 8м |
| Рабочие дни | =ЧИСТРАБДНИ(A1;B1) |
1300 |
6. Типичные ошибки и как их избежать
Ошибка #1: Формула возвращает #ИМЯ?
Причина: Неправильное название функции (например, РАЗНДАТА вместо РАЗНДАТ) или опечатка в параметрах. В английской версии Excel используйте DATEDIF, в русской — РАЗНДАТ.
Ошибка #2: Некорректный расчет месяцев
Если вы используете DATEDIF(A1;B1;"M"), она вернет общее количество месяцев между датами, а не месяцы за вычетом полных лет. Для последнего нужна единица измерения "YM".
Ошибка #3: Даты в текстовом формате
Если даты хранятся как текст (например, после импорта из CSV), Excel воспринимает их как строки. Преобразуйте в даты с помощью ДАТАЗНАЧ:
=DATEDIF(ДАТАЗНАЧ(A1); ДАТАЗНАЧ(B1); "Y")
7. Автоматизация: Power Query для массовых расчетов
Если вам нужно рассчитать разницу между датами для тысяч строк, ручной ввод формул неэффективен. Используйте Power Query (доступен в Excel 2016+ и Excel 365):
- Выделите таблицу с датами →
Данные → Получить данные → Из таблицы/диапазона. - В редакторе Power Query добавьте столбец:
Добавить столбец → Настраиваемый столбец. - Введите формулу:
Duration.Days([КонечнаяДата] - [НачальнаяДата]) / 365.25(замените имена столбцов на свои).
- Нажмите
Закрыть и загрузить— результат появится на новом листе.
Преимущество этого метода: формула автоматически применяется ко всем строкам, и при обновлении исходных данных достаточно нажать "Обновить все" в разделе Данные.
8. Готовые формулы для копирования
Скопируйте нужную формулу и замените A1 и B1 на адреса ваших ячеек с датами.
| Что рассчитать | Формула |
|---|---|
| Полные годы | =DATEDIF(A1;B1;"Y") |
| Полные месяцы (всего) | =DATEDIF(A1;B1;"M") |
| Месяцы сверх полных лет | =DATEDIF(A1;B1;"YM") |
| Дни сверх полных месяцев | =DATEDIF(A1;B1;"MD") |
| Годы с десятичной частью | =YEARFRAC(A1;B1;1) |
| Текстовый формат "X лет Y месяцев" | =DATEDIF(A1;B1;"Y") & " лет " & DATEDIF(A1;B1;"YM") & " мес." |
| Рабочие дни (без праздников) | =ЧИСТРАБДНИ(A1;B1) |
FAQ: Ответы на частые вопросы
Почему DATEDIF считает 1 января 2020 — 1 января 2021 как 0 лет?
Функция DATEDIF с параметром "Y" возвращает полные годы. Поскольку 1 января 2021 еще не исполнился полный год с 1 января 2020 (разница ровно 1 год, но без единого дня сверху), результат — 0. Чтобы получить 1, используйте параметр "YD" или комбинацию "Y" + "YM".
Как посчитать возраст на текущую дату?
Используйте:
=DATEDIF(A1; СЕГОДНЯ(); "Y") & " лет, " & DATEDIF(A1; СЕГОДНЯ(); "YM") & " мес."
Функция СЕГОДНЯ() всегда возвращает текущую дату и обновляется при пересчете листа.
Можно ли посчитать разницу между датой и временем?
Да, но для этого нужно преобразовать дату+время в числовой формат. Например:
= (B1-A1)*24
Вернет разницу в часах. Для минут умножьте на 1440 (24*60).
Почему YEARFRAC дает другой результат, чем DATEDIF?
YEARFRAC рассчитывает долю года (например, 1.5 года), а DATEDIF с параметром "Y" — только полные годы. Для сопоставимых результатов используйте:
=ЦЕЛОЕ(YEARFRAC(A1;B1;1))
Это округлит долю года до целого числа.
Как посчитать разницу между датами в Google Таблицах?
Все формулы работают аналогично, но:
- Используйте
DATEDIF(английское название даже в русской версии) - Для текстового формата замените
ВЫБОРнаCHOSE - Функция
СЕГОДНЯпишется какTODAY()