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

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

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

Особое внимание уделим форматам ячеек — именно они чаще всего становятся причиной неверных результатов. Например, если вычитать две даты в ячейках с текстовым форматом, Excel вернёт ошибку #ЗНАЧ!, хотя визуально данные выглядят корректно. Мы покажем, как это исправить за 1 клик.

═══

1. Базовый расчёт: разница между двумя датами в днях

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

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

  • 📅 Формат ячеек: обе даты должны иметь формат Дата (не текст!). Проверить это можно на вкладке Главная → Формат → Формат ячеек.
  • ⚠️ Отрицательные значения: если первая дата позже второй, результат будет отрицательным. Используйте =ABS(B1-A1), чтобы получить модуль.
  • 🔄 Автообновление: если даты в ячейках меняются (например, через =СЕГОДНЯ()), результат пересчитается автоматически.

Чтобы результат отображался не как число, а как количество дней, месяцев или лет, используйте формат ячеек. Выделите ячейку с формулой, нажмите Ctrl+1 и выберите формат Общий или Числовой.

2. Расчёт разницы в годах, месяцах и днях

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

Синтаксис:

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

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

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

Пример: чтобы узнать, сколько лет, месяцев и дней прошло с 10.06.2020 по 15.05.2026, используйте три отдельные формулы:

=РАЗНДАТ(A1; B1; "Y")  → 3 (года)

=РАЗНДАТ(A1; B1; "YM") → 11 (месяцев)

=РАЗНДАТ(A1; B1; "MD") → 5 (дней)

⚠️ Внимание: Функция РАЗНДАТ не учитывает високосные годы при расчёте дней. Для точных вычислений (например, в финансовых документах) используйте комбинацию с =ДАТАМЕС().
Почему РАЗНДАТ не в списке функций?

Функция РАЗНДАТ — наследие Lotus 1-2-3 и не документирована в официальной справке Excel. Однако она работает во всех версиях, включая Excel 365. Чтобы вставить её быстро, начните вводить название вручную — автозаполнение сработает.

3. Разница во времени: часы, минуты, секунды

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

Пример: в ячейке A1 время начала 09:30:15, в B1 — окончания 17:45:30. Формула:

=B1-A1

Результат отобразится как 08:15:15 (8 часов 15 минут 15 секунд). Чтобы преобразовать это в:

  • Часы с десятичной частью: измените формат ячейки на Числовой и умножьте на 24: =(B1-A1)*248,25416 (часов).
  • ⏱️ Минуты: умножьте на 1440 (24×60): =(B1-A1)*1440495,25 (минут).
  • ⏲️ Секунды: умножьте на 86400 (24×60×60): =(B1-A1)*8640029715 (секунд).

Критическая ошибка: если время в ячейках введено как текст (например, "09:30" без форматирования), Excel не сможет вычесть его корректно. Используйте =ВРЕМЗНАЧ() для преобразования:

=ВРЕМЗНАЧ("09:30:15") - ВРЕМЗНАЧ("17:45:30")
ЗадачаФормулаРезультат
Часы между 9:00 и 17:30=("17:30"-"9:00")*248,5
Минуты между 14:15 и 15:45=("15:45"-"14:15")*144090
Секунды между 00:00:10 и 00:00:25=("00:00:25"-"00:00:10")*8640015

Ежедневно|Несколько раз в неделю|Редко|Никогда-->

4. Учёт рабочих дней: игнорируем выходные и праздники

Для расчёта сроков выполнения задач (например, в проектном управлении) важно исключить выходные и праздничные дни. В Excel для этого есть функция =ЧИСТРАБДНИ().

Синтаксис:

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

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

=ЧИСТРАБДНИ("01.06.2026"; "15.06.2026"; {"12.06.2026"})

Результат: 11 рабочих дней. Если праздников несколько, перечислите их в фигурных скобках через точку с запятой: {"01.01.2026"; "07.01.2026"}.

  • 📊 Динамический диапазон: вместо ручного ввода дат праздников укажите диапазон ячеек (например, D1:D10), где они перечислены.
  • 🔄 Обратный отсчёт: чтобы узнать дату окончания задачи через N рабочих дней, используйте =РАБДЕНЬ():
=РАБДЕНЬ("01.06.2026"; 10; {"12.06.2026"})

Формула вернёт 14.06.2026 (10 рабочих дней с учётом праздника).

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

Проверить формат ячеек с датами (должен быть "Дата")

Создать отдельный список праздников в диапазоне ячеек

Убедиться, что в списке праздников нет дублей

Использовать абсолютные ссылки на диапазон праздников (например, $D$1:$D$10)-->

5. Расчёт времени с учётом ночных смен и перерывов

Сложные графики работы (например, в колл-центрах или производстве) требуют учёта ночных смен и перерывов. Здесь поможет комбинация функций =ЕСЛИ() и =ВРЕМЯ().

Пример: сотрудник работает с 22:00 до 06:00 с перерывом на час. Нужно посчитать чистое рабочее время:

=ЕСЛИ(B1

Разберём формулу:

  1. B1 — проверка, пересекает ли смена полночь.
  2. (ВРЕМЯ(6;0;0)-ВРЕМЯ(22;0;0)) — длительность смены (8 часов).
  3. -ВРЕМЯ(1;0;0) — вычитание перерыва (1 час).

Для автоматического расчёта по таблице с данными о начале и конце смены:

=ЕСЛИ(конец<начало; (ВРЕМЯ(24;0;0)-начало)+конец; конец-начало)-перерыв

Где начало, конец и перерыв — ссылки на соответствующие ячейки.

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

Даже простые расчёты с датами и временем могут давать сбой из-за скрытых нюансов. Вот топ-5 ошибок и их решения:

  • 🗓️ Текст вместо даты: если дата введена как текст (например, скопирована из PDF), Excel не распознаёт её. Используйте =ДАТАЗНАЧ() для преобразования:
    =ДАТАЗНАЧ("15.05.2026")
  • 24-часовой формат: при ручном вводе времени убедитесь, что Excel интерпретирует его правильно. Например, 18:30 может стать 06:30 PM в американских настройках.
  • 🔢 Округление: функции вроде =РАЗНДАТ округляют результаты. Для точных расчётов (например, процентов за просрочку) используйте =ДОЛЯГОДА().
  • 📅 Високосные годы: Excel ошибочно считает 1900 год високосным (хотя он не является таковым). Это может искажать расчёты на больших временных интервалах.
  • 🔗 Ссылки на ячейки: при копировании формул абсолютные ссылки (с $) не изменяются, а относительные — смещаются. Используйте F4 для быстрого переключения.

Чтобы проверить, распознаёт ли Excel ваши данные как дату/время, используйте функцию =ТИП():

=ТИП(A1)=1  → TRUE, если в A1 дата/время

7. Продвинутые приёмы: массивы и Power Query

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

  • 📈 Power Query: импорт данных из внешних источников с автоматической конвертацией строк в даты. Например, загрузите CSV-файл с логами и преобразуйте столбец со строками вида "2026-05-15 14:30:00" в формат даты/времени.
  • 🔢 Формулы массива: для расчёта разницы между всеми парами дат в двух столбцах:
    =МАКС(($B$1:$B$100-$A$1:$A$100)*24)

    (вводится как формула массива с Ctrl+Shift+Enter в старых версиях Excel).

  • 📊 Сводные таблицы: группировка данных по дням недели, часам или месяцам с автоматическим подсчётом средней продолжительности.

Пример использования Power Query:

  1. Перейдите на вкладку Данные → Получить данные → Из файла → Из CSV.
  2. Выберите столбец с датами, кликните правой кнопкой → Изменить тип → Дата/время.
  3. Добавьте пользовательский столбец с формулой = [Конец] - [Начало] для расчёта разницы.
⚠️ Внимание: При импорте данных из внешних источников (например, 1С или SQL) даты могут конвертироваться в текст. Всегда проверяйте формат ячеек после импорта.

═══

FAQ: Частые вопросы о расчёте времени в Excel

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

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

=ЧИСТРАБДНИ(A1; B1) * (8 - 1)

Где 8 — длительность рабочего дня, 1 — перерыв.

Почему формула =B1-A1 возвращает дату 01.01.1900 вместо числа?

Это означает, что результат вычитания — дробное число (например, 3,5 дня), а ячейка имеет формат Дата. Измените формат на Общий или Числовой.

Как посчитать разницу между датами в месяцах, игнорируя дни?

Используйте функцию =РАЗНДАТ с параметром "M":

=РАЗНДАТ(A1; B1; "M")

Она вернёт полное количество месяцев между датами, даже если дни не совпадают.

Можно ли в Excel посчитать время с учётом часовых поясов?

Excel не поддерживает часовые пояса напрямую. Преобразуйте время к UTC или используйте надстройку Power Query для корректировки времени перед расчётами.

Как автоматически обновлять разницу между текущей датой и фиксированной?

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

=СЕГОДНЯ()-A1

Чтобы обновление происходило при каждом открытии файла, сохраните его в формате .xlsm и добавьте VBA-макрос:

Private Sub Workbook_Open()

Application.CalculateFull

End Sub