Расчёт разницы между датами в Excel: от дней до лет с учётом выходных

Почему стандартное вычитание дат не всегда работает

На первый взгляд, вычесть одну дату из другой в Microsoft Excel проще простого: достаточно ввести формулу =B2-A2, и программа сама покажет количество дней между значениями. Но что, если вам нужно узнать не просто дни, а полные годы, месяцы или рабочие дни без выходных? Или учесть производственный календарь с праздничными датами?

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

Предупреждение: если вы работаете с датами до 1900 года или используете Excel для Mac версии старше 2011 года, некоторые функции могут давать сбои. Об этом — в разделе про ошибки.

📊 Как часто вам нужно рассчитывать разницу между датами в Excel?
Ежедневно
Раз в неделю
Редко
Никогда

Способ 1: Базовое вычитание дат (количество дней)

Самый простой метод — вычесть одну дату из другой. Excel автоматически преобразует результат в количество дней, так как внутренне хранит даты как числа.

Пример: если в ячейке A1 указана дата 01.01.2023, а в B115.01.2023, формула =B1-A1 вернёт 14.

  • Плюсы: работает во всех версиях Excel, не требует специальных функций.
  • Минусы: не учитывает месяцы/годы, не фильтрует выходные.
⚠️ Внимание: если результат отображается как дата (например, 14.01.1900), измените формат ячейки на Общий или Числовой.

Ячейки содержат корректные даты (не текст)|Формат ячеек — "Дата"|Результат вычитания отформатирован как число-->

Способ 2: Функция DATEDIF — расчёт лет, месяцев и дней

Функция DATEDIF (от англ. Date Difference) — скрытая "фишка" Excel, которой нет в списке мастер-функций. Она позволяет вычислить разницу в годах, месяцах или днях с учётом календарных правил.

Синтаксис:

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

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

  • 📅 "Y" — полные годы между датами.
  • 📆 "M" — полные месяцы (игнорирует годы).
  • 📇 "D" — дни (игнорирует месяцы и годы).
  • 📅📆 "YM" — месяцы без учёта полных лет.
  • 📅📇 "MD" — дни без учёта полных месяцев и лет.
  • 📅📆📇 "YD" — дни между датами, как если бы они были в одном году.

Пример: формула =DATEDIF("01.05.2020"; "15.08.2023"; "Y") вернёт 3 (полных года), а =DATEDIF("01.05.2020"; "15.08.2023"; "YM")3 (месяца сверх полных лет).

Единица измерения Формула Результат для дат
01.01.202015.03.2023
"Y" =DATEDIF(A1;B1;"Y") 3
"M" =DATEDIF(A1;B1;"M") 38
"D" =DATEDIF(A1;B1;"D") 1160
"YM" =DATEDIF(A1;B1;"YM") 2
⚠️ Внимание: если начальная дата позже конечной, DATEDIF вернёт ошибку #ЧИСЛО!. Используйте =ABS(DATEDIF(...)) для абсолютного значения.

Способ 3: Рабочие дни (исключаем выходные и праздники)

Для расчёта только рабочих дней (понедельник–пятница) используйте функцию NETWORKDAYS:

NETWORKDAYS(начальная_дата; конечная_дата; [праздники])

Необязательный аргумент [праздники] — это диапазон ячеек с датами, которые также нужно исключить (например, государственные праздники).

Пример: если в ячейках A1 и B1 указаны даты 01.01.2023 и 31.01.2023, а в диапазоне D1:D2 перечислены праздники 07.01.2023 и 08.01.2023, формула будет:

=NETWORKDAYS(A1; B1; D1:D2)
  • 📅 Важно: по умолчанию NETWORKDAYS считает выходными субботу и воскресенье. Для других дней недели используйте NETWORKDAYS.INTL.
  • 📊 Пример с нестандартными выходными:
    =NETWORKDAYS.INTL(A1; B1; 11; D1:D2)

    Здесь 11 — код для выходных воскресенье+понедельник.

Коды выходных дней для NETWORKDAYS.INTL

1 — суббота+воскресенье (по умолчанию)

2 — воскресенье+понедельник

3 — понедельник+вторник

...

11 — только воскресенье

12 — только понедельник

17 — только суббота

Способ 4: Разница в месяцах и годах с учётом неполных периодов

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

Для месяцев:

=DATEDIF(A1;B1;"M") + (DAY(B1)-DAY(A1))/30

Для лет:

=DATEDIF(A1;B1;"Y") + DATEDIF(A1;B1;"YM")/12 + (DAY(B1)-DAY(A1))/365

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

⚠️ Внимание: при расчёте возраста сотрудников или сроков договоров избегайте дробных лет/месяцев — это может привести к юридическим ошибкам. Используйте отдельные столбцы для полных и неполных периодов.

Способ 5: Продвинутый расчёт через Power Query

Если вам нужно обработать тысячи строк с датами или создать динамический отчёт, используйте Power Query (вкладка Данные → Получение данных). Этот инструмент позволяет:

  • 📊 Автоматически вычислять разницу между датами при импорте данных.
  • 🔄 Обновлять результаты одним кликом при изменении исходных данных.
  • 📅 Создавать пользовательские столбцы с формулами на языке M.

Пример кода для Power Query, который добавляет столбец с разницей в днях:

let

Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],

ДобавленСтолбец = Table.AddColumn(Источник, "РазницаДней", each Duration.Days([КонечнаяДата] - [НачальнаяДата]))

in

ДобавленСтолбец

Для расчёта лет и месяцев используйте:

Table.AddColumn(Источник, "РазницаЛет", each Date.Year([КонечнаяДата]) - Date.Year([НачальнаяДата]) - IF(Date.From([КонечнаяДата]) < Date.From(Date.StartOfYear([КонечнаяДата]))) THEN 1 ELSE 0)

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

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

  1. Текст вместо даты: если ячейка содержит текст (например, "01.01.2023" вместо даты), Excel вернёт ошибку. Решение: используйте =ДАТАЗНАЧ(A1) для преобразования.
  2. Неправильный формат: даты в формате дд.мм.гггг и мм/дд/гггг Excel может путать. Решение: явно укажите формат через Формат ячеек → Дата.
  3. Отрицательная разница: если начальная дата позже конечной, DATEDIF вернёт #ЧИСЛО!. Решение: используйте =ABS(DATEDIF(...)).
  4. 1900 vs 1904: в Excel для Mac (до 2011 года) система дат начинается с 1904 года, а не 1900. Решение: проверьте настройки в Параметры Excel → Дополнительно → При переходе на эту книгу → Система дат 1904.

Критическая ошибка: если вы работаете с финансовыми отчётами, никогда не используйте простую разницу дней для расчёта процентов — это нарушает стандарты PSAK 35 (для России) и IAS 1 (международные). Используйте ДОЛЯГОДА или ДНЕЙ360.

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

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

Используйте формулу:

=ЦЕЛОЕ((B1-A1)/7)

Где A1 и B1 — начальная и конечная даты. Для остатка дней (неполных недель) добавьте:

=ОСТАТ((B1-A1);7)
Почему DATEDIF возвращает неверное количество месяцев?

Функция DATEDIF считает полные месяцы. Например, между 31.01.2023 и 01.03.2023 будет 1 месяц, а не 2, так как 28/29 февраля не хватает для полного месяца. Для альтернативного расчёта используйте:

=ГОД(B1)*12+МЕСЯЦ(B1) - (ГОД(A1)*12+МЕСЯЦ(A1))
Как учесть региональные праздники в NETWORKDAYS?

Создайте отдельный лист с перечнем праздничных дат для вашего региона (например, 01.01.2023, 07.01.2023 и т.д.). Затем ссылайтесь на этот диапазон в аргументе [праздники]:

=NETWORKDAYS(A1; B1; Праздники!A2:A10)

Для автоматического обновления праздников используйте Power Query с подключением к государственному календарю (например, через API data.gov.ru).

Можно ли рассчитать разницу между датой и временем?

Да, но для этого нужно объединить дату и время в одном формате. Например:

=B1-A1

Где A1 = 01.01.2023 10:00, а B1 = 02.01.2023 15:30. Результат будет в днях (например, 1,229...). Чтобы перевести в часы, умножьте на 24:

=(B1-A1)*24
Как посчитать возраст человека в Excel?

Используйте комбинацию DATEDIF для полных лет, месяцев и дней:

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

Где A1 — дата рождения, а TODAY() — текущая дата. Для русскоязычного формата замените "Y" на "Г" (в русской версии Excel).