Как вычислить разницу между датами в Excel: от дней до лет (с формулами и примерами)

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

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

Особое внимание уделим скрытым ловушкам: почему РАЗНДАТ может выдавать неточные результаты для месячных интервалов, как правильно обрабатывать пустые ячейки и почему никогда не стоит хранить даты в текстовом формате. В конце статьи — FAQ с решениями самых частых проблем и готовые шаблоны формул для копирования.

1. Простое вычитание дат: дни, часы и минуты

Самый очевидный способ узнать разницу между двумя датами — вычесть одну из другой. Excel автоматически преобразует результат в количество дней, так как хранит даты в виде последовательных чисел (начиная с 1 января 1900 года = 1).

Пример: если в ячейке A1 указана дата 15.05.2026, а в B120.05.2026, формула =B1-A1 вернёт 5 (дни). Чтобы получить часы или минуты, умножьте результат на 24 или 1440 соответственно:

  • 📅 Дни: =B1-A15
  • Часы: =(B1-A1)*24120
  • ⏱️ Минуты: =(B1-A1)*14407200

⚠️ Внимание: Если результат отрицательный (например, -5), это означает, что вторая дата раньше первой. Чтобы избежать ошибок, используйте функцию АБС:

=АБС(B1-A1)

2. Функция РАЗНДАТ (DATEDIF): секретный инструмент для месяцев и лет

Функция РАЗНДАТ (или DATEDIF в английской версии) — это скрытая жемчужина Excel. Она не отображается в мастер-функций, но работает во всех версиях программы. С её помощью можно вычислить разницу в годах, месяцах или днях с учётом календарных правил.

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

=РАЗНДАТ(начальная_дата; конечная_дата; единица_измерения)

Где единица_измерения может принимать значения:

КодОписаниеПример результата
"Y"Полные годы=РАЗНДАТ("15.05.2020"; "15.05.2026"; "Y")4
"M"Полные месяцы=РАЗНДАТ("15.05.2026"; "10.06.2026"; "M")0 (менее месяца)
"D"Дни=РАЗНДАТ("15.05.2026"; "20.05.2026"; "D")5
"YM"Месяцы без учёта лет=РАЗНДАТ("15.05.2023"; "10.08.2026"; "YM")15
"MD"Дни без учёта месяцев/лет=РАЗНДАТ("15.05.2026"; "10.06.2026"; "MD")26

🔹 Пример для HR: Чтобы посчитать стаж сотрудника в формате "X лет Y месяцев", combine две функции:

=РАЗНДАТ(A1; СЕГОДНЯ(); "Y") & " лет " & РАЗНДАТ(A1; СЕГОДНЯ(); "YM") & " месяцев"
📊 Какой формат разницы дат вам нужнее всего?
Дни
Месяцы
Годы
Годы и месяцы вместе

3. Ошибки при работе с датами: что ломает ваши формулы

Даже опытные пользователи Excel сталкиваются с неожиданными ошибками при расчёте разницы дат. Вот топ-3 причины, почему формулы возвращают неверные значения:

⚠️ Внимание: Excel не распознаёт даты до 1 января 1900 года в Windows-версии (в Mac — до 1904 года). Если ваши данные содержат исторические даты, используйте текстовой формат или специализированные надстройки.
  • 🚫 Текст вместо даты: Если ячейка отформатирована как текст (например, '15.05.2026 с апострофом), Excel не сможет вычесть её из другой даты. Проверьте формат ячейки (Ctrl+1) и при необходимости преобразуйте текст в дату с помощью ДАТАЗНАЧ:
  • =ДАТАЗНАЧ("15.05.2026")
  • ⚠️ Отрицательные результаты: Если конечная дата раньше начальной, формулы вроде РАЗНДАТ вернут ошибку #ЧИСЛО!. Используйте ЕСЛИОШИБКА:
  • =ЕСЛИОШИБКА(РАЗНДАТ(A1; B1; "D"); "Дата окончания раньше начальной")
  • 📅 Високосные годы: Функции РАЗНДАТ("28.02.2020"; "01.03.2020"; "D") и РАЗНДАТ("28.02.2021"; "01.03.2021"; "D") вернут разные результаты (2 и 1 день соответственно). Учитывайте это при расчёте сроков!
Почему 1900 год — "нулевая" дата в Excel?

В первых версиях Lotus 1-2-3 (предшественник Excel) разработчики ошиблись, считая 1900 год високосным, хотя он таковым не является. Microsoft сохранила эту ошибку для совместимости, поэтому в Windows-версии Excel даты начинаются с 1.01.1900, а не с 1.01.1904 (как в Mac).

4. Рабочие дни: как исключить выходные и праздники

Для расчёта только рабочих дней (исключая субботу/воскресенье) используйте функцию ЧИСТРАБДНИ:

=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])

Пример: чтобы посчитать рабочие дни между 15.05.2026 и 30.05.2026, исключив 9 мая (праздник):

=ЧИСТРАБДНИ("15.05.2026"; "30.05.2026"; {"09.05.2026"})

🔹 Для сложных календарей (например, с плавающими праздниками):

  1. Создайте отдельный лист с перечнем праздников.
  2. В формуле укажите диапазон с этими датами:
  3. =ЧИСТРАБДНИ(A1; B1; Праздники!A2:A10)

Создать список праздничных дат|Проверить формат ячеек (должен быть "Дата")|Исключить субботу/воскресенье в настройках функции|Учесть региональные особенности (например, 1-2 января)

-->

5. Разница в месяцах и годах: нюансы функции РАЗНДАТ

Функция РАЗНДАТ с параметрами "M" или "Y" учитывает полные месяцы/годы. Это означает:

  • 📆 =РАЗНДАТ("31.01.2026"; "01.02.2026"; "M") вернёт 0 (менее месяца), хотя прошёл 1 день.
  • 🎂 =РАЗНДАТ("29.02.2020"; "28.02.2026"; "Y") вернёт 4, хотя фактически прошло 4 года минус 1 день (из-за високосного года).

🔹 Решение для точных расчётов: Combine несколько параметров:

=РАЗНДАТ(A1; B1; "Y") & " лет, " & РАЗНДАТ(A1; B1; "YM") & " мес., " & РАЗНДАТ(A1; B1; "MD") & " дн."

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

=((ГОД(B1)-ГОД(A1))*12)+МЕСЯЦ(B1)-МЕСЯЦ(A1)

6. Автоматизация: динамические даты и условное форматирование

Чтобы формулы автоматически обновлялись при изменении текущей даты, используйте СЕГОДНЯ() или ТДАТА() (включает время). Примеры:

  • Дней до дедлайна: =B1-СЕГОДНЯ() (где B1 — дата дедлайна).
  • 🎯 Просроченные задачи: Примените условное форматирование к ячейке с разницей дат. Правило: Если значение < 0 → красный цвет.
  • 📊 Диаграммы Ганта: Используйте разницу дат для построения временных шкал. Пример формулы для длительности задачи: =ЕСЛИ(D1=""; ""; D1-C1), где C1 — начало, D1 — конец.

🔹 Для проектных менеджеров: Чтобы отслеживать выполнение этапов, создайте таблицу с формулой:

=ЕСЛИ(СЕГОДНЯ()>D1; "Просрочено"; ЕСЛИ(СЕГОДНЯ()>=C1; "В процессе"; "Не начато"))

7. Продвинутые сценарии: массивы, Power Query и VBA

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

  1. Формулы массива: Чтобы посчитать разницу между датами в двух столбцах и вернуть результат в третьем, используйте:
  2. =ЕСЛИ(И(NЕПУСТО(A2:A100); НЕПУСТО(B2:B100)); B2:B100-A2:A100; "")

    ⚠️ Внимание: В новых версиях Excel 365 формулы массива вводятся без Ctrl+Shift+Enter.

  3. Power Query: Для импорта данных с датами из внешних источников (например, SQL или CSV) и автоматического расчёта разницы:
    1. Загрузите данные в Power Query (Данные → Получить данные).
    2. Добавьте пользовательский столбец с формулой = [Дата2] - [Дата1].
    3. Замените тип данных столбца на Длительность.
  4. VBA: Для создания пользовательской функции (например, расчёта разницы в кварталах):
  5. Function РазницаКварталов(Дата1 As Date, Дата2 As Date) As Integer
    

    РазницаКварталов = (Year(Дата2) - Year(Дата1)) * 4 + (DatePart("q", Дата2) - DatePart("q", Дата1))

    End Function

    Теперь в Excel можно использовать =РазницаКварталов(A1; B1).

FAQ: Ответы на частые вопросы

🔍 Почему формула =B1-A1 возвращает не число, а дату (например, 05.01.1900)?

Это означает, что ячейка с результатом отформатирована как Дата, а не Общий или Числовой. Исправьте формат: выделите ячейку → Ctrl+1 → выберите формат Числовой.

❌ Почему РАЗНДАТ выдаёт ошибку #ИМЯ?

Вероятно, вы используете нерусскую версию Excel, где функция называется DATEDIF. Либо опечатка в параметрах (например, "y" вместо "Y"). Проверьте синтаксис:

=DATEDIF(A1; B1; "D")
📅 Как посчитать разницу между датой и сегодняшним днём, исключая выходные?

Используйте комбинацию ЧИСТРАБДНИ и СЕГОДНЯ:

=ЧИСТРАБДНИ(A1; СЕГОДНЯ(); Праздники!A2:A10)

Где Праздники!A2:A10 — диапазон с нерабочими днями.

🕒 Как перевести разницу в днях в часы/минуты?

Умножьте результат на 24 (часы) или 1440 (минуты). Пример для часов:

=(B1-A1)*24

Чтобы отобразить результат в формате чч:мм, примените формат Время к ячейке.

🔄 Можно ли посчитать разницу между временем (часы:минуты)?

Да! Вычтите одно время из другого (например, =B1-A1, где A1=08:30, B1=17:45). Чтобы избежать ошибок с отрицательными значениями, используйте:

=ЕСЛИ(B1