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

Почему расчёт периодов в Excel — это не только про вычитание

Вы когда-нибудь пытались вручную посчитать, сколько рабочих дней прошло между двумя датами в проекте? Или определяли возраст клиента по дате рождения в базе данных? В Microsoft Excel и Google Таблицах эти задачи решаются за секунды — если знать правильные формулы. Но многие пользователи до сих пор ограничиваются простым вычитанием одной даты из другой (=B2-A2), получая лишь количество дней, а потом вручную делят на 30 или 365, чтобы приблизительно оценить месяцы или годы.

На практике такой подход даёт погрешность до 10-15% — особенно критично, когда речь идёт о финансовых расчётах, сроках поставок или юридических дедлайнах. Например, разница между 01.01.2023 и 01.03.2023 — это не 2 месяца, а 59 дней (или 41 рабочий день, если исключить выходные). В этой статье разберём 5 профессиональных методов расчёта периодов — от базовых до продвинутых, включая учёт праздников, неполных месяцев и даже временных зон.

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

Метод 1: Простое вычитание дат (дни, недели, годы)

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

=B2-A2  // Разница в днях

=(B2-A2)/7 // Разница в неделях

=(B2-A2)/365 // Приблизительная разница в годах

Но здесь кроются подводные камни:

  • 🔹 Неточность годов: Деление на 365 игнорирует високосные годы (где 366 дней). Для периода с 29.02.2020 по 29.02.2026 формула даст 4 года, хотя фактически прошло 4 високосных года — 1461 день вместо 1460.
  • 🔹 Округление недель: (B2-A2)/7 вернёт дробное число (например, 3.285 недели), что не всегда удобно для отчётов.
  • 🔹 Формат ячейки: Если результат отображается как дата (например, 03.01.1900 вместо 3 дней), измените формат ячейки на Общий или Числовой.
⚠️ Внимание: При копировании формулы на большие диапазоны убедитесь, что ячейки с датами имеют формат Дата, а не Текст. Иначе Excel воспримет 01.05.2023 как текст, и вычитание вернёт ошибку #ЗНАЧ!.
Формула Пример Результат Примечание
=B2-A2 15.06.2023 - 10.06.2023 5 Дни
=ОТБР((B2-A2)/7) 22.06.2023 - 10.06.2023 1 Полные недели (округление вниз)
=ЦЕЛОЕ((B2-A2)/365,25) 10.06.2026 - 10.06.2020 4 Годы с учётом високосных (365,25 — средняя длина года)
📊 Какой формат разницы между датами вам нужен чаще всего?
Дни
Недели
Месяцы
Годы
Рабочие дни

Метод 2: Функция РАЗНДАТ (DATEDIF) — скрытый инструмент Excel

Функция РАЗНДАТ (или DATEDIF в английской версии) не отображается в списке функций Excel, но работает во всех версиях, включая Excel 365 и Google Таблицы. Её синтаксис:

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

Где единица_измерения — это код, определяющий формат результата:

  • 📅 "D" — дни между датами.
  • 📆 "M" — полные месяцы (игнорирует дни).
  • 📅 "Y" — полные годы (игнорирует месяцы и дни).
  • 📊 "YM" — месяцы без учёта годов (например, разница между 15.01.2023 и 10.03.2023 = 1 месяц, если игнорировать дни).
  • 📈 "MD" — дни без учёта месяцев и годов (полезно для расчёта "остатков" после вычитания полных месяцев).
  • 📉 "YD" — дни без учёта годов (например, разница между 15.01.2023 и 10.03.2026 = 360 дней, если игнорировать год).

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

=РАЗНДАТ(A2;СЕГОДНЯ();"Y") & " лет, " & РАЗНДАТ(A2;СЕГОДНЯ();"YM") & " мес., " & РАЗНДАТ(A2;СЕГОДНЯ();"MD") & " дн."

Результат: "33 лет, 1 мес., 29 дн." (точный расчёт с учётом календаря).

⚠️ Внимание: Функция РАЗНДАТ не учитывает временные зоны. Если вы работаете с данными из разных стран, предварительно приведите даты к одному часовому поясу с помощью =A2 + (часовой_пояс/24).

Убедитесь, что даты в формате "Дата", а не "Текст"|

Проверьте порядок дат: нач_дата ≤ кон_дата, иначе результат будет отрицательным|

Для текущей даты используйте функцию СЕГОДНЯ()|

Для динамических расчётов зафиксируйте ячейки абсолютными ссылками (например, $A$2)

-->

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

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

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

Где [праздники] — необязательный диапазон с датами праздничных дней. Пример:

  • 📅 =ЧИСТРАБДНИ("10.06.2023"; "20.06.2023") → вернёт 8 дней (исключает субботы и воскресенья).
  • 🎉 =ЧИСТРАБДНИ("10.06.2023"; "20.06.2023"; D2:D5) → если в D2:D5 указаны праздники (например, 12.06.2023), они тоже исключаются.

Для более гибких расчётов (например, если выходные — пятница и суббота) используйте ЧИСТРАБДНИ.МЕЖД:

=ЧИСТРАБДНИ.МЕЖД(нач_дата; кон_дата; выходной; [праздники])

Где выходной — число от 1 до 17, обозначающее weekend (например, 1 — суббота-воскресенье, 11 — только воскресенье).

Функция Пример Результат Комментарий
ЧИСТРАБДНИ =ЧИСТРАБДНИ("10.06.2023"; "17.06.2023") 5 Суббота и воскресенье исключены
ЧИСТРАБДНИ.МЕЖД =ЧИСТРАБДНИ.МЕЖД("10.06.2023"; "17.06.2023"; 11) 6 Выходной только воскресенье
ЧИСТРАБДНИ с праздниками =ЧИСТРАБДНИ("10.06.2023"; "17.06.2023"; E2:E3) 4 В E2:E3 указаны праздники 12.06 и 13.06

Метод 4: Периоды в месяцах с учётом неполных интервалов

Если вам нужно посчитать месяцы между датами с учётом неполных периодов (например, для начисления процентов по кредиту), стандартное вычитание или РАЗНДАТ с параметром "M" не подойдут. Они округляют результат в меньшую сторону. Например, разница между 31.01.2023 и 01.03.2023:

  • 🔢 =РАЗНДАТ("31.01.2023"; "01.03.2023"; "M") → 1 месяц (игнорирует 28 дней февраля).
  • 🔢 =ГОД(A2)*12+МЕСЯЦ(A2) - (ГОД(B2)*12+МЕСЯЦ(B2)) → тоже 1 месяц.

Для точного расчёта используйте комбинацию:

=РАЗНДАТ(A2;B2;"Y")*12 + РАЗНДАТ(A2;B2;"YM") + ЕСЛИ(ДЕНЬ(B2)>=ДЕНЬ(A2);0;-1)

Эта формула:

  1. Считает полные годы и переводит их в месяцы (РАЗНДАТ(...;"Y")*12).
  2. Добавляет полные месяцы (РАЗНДАТ(...;"YM")).
  3. Корректирует результат на -1, если день окончания периода меньше дня начала (например, с 31.01 по 28.02).

Пример: для периода 31.01.2023 — 15.03.2023 формула вернёт 1 месяц и 14 дней (а не 1 месяц, как РАЗНДАТ с параметром "M").

Почему нельзя просто вычесть месяцы?

Потому что количество дней в месяцах разное. Например, разница между 31 января и 1 марта — это 1 месяц и 28 дней (если год не високосный), а не 2 месяца. Простое вычитание месяцев (=МЕСЯЦ(B2)-МЕСЯЦ(A2)) даст 2, что неверно.

Метод 5: Автоматизация для больших таблиц (Power Query)

Если вам нужно посчитать периоды для тысяч строк (например, в отчёте по продажам или логистике), ручной ввод формул займёт часы. В этом случае используйте Power Query — инструмент для автоматизации обработки данных, встроенный в Excel 2016+ и Excel 365.

Алгоритм действий:

  1. Выделите таблицу с датами и перейдите на вкладку ДанныеПолучить данныеИз таблицы/диапазона.
  2. В открывшемся редакторе Power Query добавьте Настраиваемый столбец с формулой:
= Duration.Days([кон_дата] - [нач_дата])  // Разница в днях

или

= Date.Year([кон_дата]) - Date.Year([нач_дата]) // Разница в годах

  1. Для рабочих дней используйте:
= Date.IsInNextNDays([нач_дата], Date.DaysInMonth([кон_дата]))  // Пример для фильтрации

Преимущества Power Query:

  • 🔄 Обрабатывает миллионы строк без тормозов.
  • 📊 Позволяет объединять данные из нескольких источников (например, даты из Excel и праздники из CSV).
  • 🔄 Обновляет результаты одним кликом (Обновить все).
⚠️ Внимание: При импорте дат из внешних источников (например, или SQL) проверьте их формат. Power Query может воспринять DD.MM.YYYY как MM.DD.YYYY, если региональные настройки системы отличаются.

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

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

  1. 🗓️ Текст вместо даты: Если дата введена как текст (например, после импорта из CSV), Excel не сможет её обработать. Проверьте формат ячейки и используйте =ДАТАЗНАЧ(A2) для преобразования.
  2. 🔢 Отрицательная разница: Если нач_дата > кон_дата, большинство функций вернут ошибку или отрицательное число. Используйте =АБС(РАЗНДАТ(...)) для модуля.
  3. 📅 Игнорирование временной зоны: Если даты из разных источников (например, сервер в UTC, а локальный компьютер в UTC+3), разница может отличаться на ±1 день. Приводите всё к одному стандарту.
  4. 🎭 Неправильный региональный формат: В американском Excel дата 01.05.2023 интерпретируется как 1 мая, а в европейском — как 5 января. Установите правильный формат в Файл → Параметры → Язык.

Чтобы избежать ошибок, используйте проверку данных:

  • 🔍 =ЕДАТА(A2;0) — проверяет, является ли значение в A2 корректной датой (вернёт ту же дату или ошибку).
  • 🔍 =ЕОШ(РАЗНДАТ(A2;B2;"D")) — возвращает ИСТИНА, если расчёт разницы завершился ошибкой.

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

Как посчитать возраст человека по дате рождения?

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

=РАЗНДАТ(A2;СЕГОДНЯ();"Y") & " лет, " & РАЗНДАТ(A2;СЕГОДНЯ();"YM") & " мес., " & РАЗНДАТ(A2;СЕГОДНЯ();"MD") & " дн."

Где A2 — ячейка с датой рождения. Для точного расчёта в годах с учётом месяца используйте:

=ЕСЛИ(ИЛИ(МЕСЯЦ(СЕГОДНЯ())>МЕСЯЦ(A2); И(МЕСЯЦ(СЕГОДНЯ())=МЕСЯЦ(A2); ДЕНЬ(СЕГОДНЯ())>=ДЕНЬ(A2))); ГОД(СЕГОДНЯ())-ГОД(A2); ГОД(СЕГОДНЯ())-ГОД(A2)-1)
Как исключить праздники при расчёте рабочих дней?

Создайте отдельный столбец или диапазон с датами праздников (например, D2:D10), затем используйте:

=ЧИСТРАБДНИ(A2;B2;D2:D10)

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

=ДАТА(ГОД; 4; 19) - ОСТАТ(19*ОСТАТ(ГОД;19)-1;30)  // Упрощённая формула
Как посчитать период между датой и временем?

Если в ячейках хранятся дата и время (например, 10.06.2023 14:30), используйте:

= (B2-A2)*24  // Разница в часах

= (B2-A2)*24*60 // Разница в минутах

Для отдельного учёта дней и времени:

= ЦЕЛОЕ(B2-A2) & " дн., " & ТЕКСТ(ОСТАТ(B2-A2;1);"ч:мм")
Как посчитать количество полных недель между датами?

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

= ОТБР((B2-A2)/7)  // Полные недели (округление вниз)

= ОКРУГЛВНИЗ((B2-A2)/7;0) // Альтернативный вариант

Для учёта неполных недель (например, "2.5 недели"):

= (B2-A2)/7
Почему РАЗНДАТ возвращает #ИМЯ?

Ошибка #ИМЯ! означает, что Excel не распознаёт функцию. Причины:

  1. Опечатка в названии (правильно: РАЗНДАТ для русской версии, DATEDIF для английской).
  2. Отсутствует точка с запятой между аргументами (например, =РАЗНДАТ(A2 B2 "D") вместо =РАЗНДАТ(A2; B2; "D")).
  3. Ячейки с датами имеют текстовый формат (проверьте с помощью =ТИП(A2) — должно вернуть 1 для чисел/дат).

Решение: исправьте синтаксис или преобразуйте текст в дату с помощью =ДАТАЗНАЧ().