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

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

Многие пользователи ошибочно думают, что достаточно вычесть одну дату из другой — и получить готовый результат в часах. На практике это работает только в 30% случаев. Остальные 70% требуют учета формата ячеек, временных зон, перехода на зимнее/летнее время и даже специфики 24-часового формата. В этой статье мы разберем 5 проверенных методов расчета часов между датами — от элементарных до профессиональных, с учетом всех подводных камней.

Особое внимание уделим трём ключевым проблемам, с которыми сталкивается 9 из 10 пользователей:

  • 🔄 Неправильный формат ячеек — когда Excel воспринимает даты как текст и возвращает ошибку #ЗНАЧ!
  • Игнорирование ночных смен — если интервал пересекает полночь, стандартные формулы дают неверный результат
  • 🏖️ Учет выходных и праздников — как исключить нерабочие дни из расчета без ручного пересчета
📊 Для чего вам нужно считать часы между датами в Excel?
Учет рабочего времени сотрудников
Анализ времени выполнения задач
Расчет аренды/услуг по часам
Контроль сроков проектов
Другое

1. Базовый метод: простая разность дат в часах

Начнем с самого очевидного способа — вычитания одной даты из другой с последующим преобразованием результата в часы. Этот метод подходит для непрерывных интервалов, когда вам не нужно учитывать выходные, перерывы или смены.

Формула выглядит так:

= (Конечная_дата - Начальная_дата) * 24

Где * 24 — это коэффициент перевода дней в часы (так как Excel хранит даты как дробные числа, где целая часть — дни, а дробная — время).

Пример: если в ячейке A2 указана дата начала 01.01.2026 09:00, а в B2 — дата окончания 02.01.2026 17:00, формула вернет 32 часа.

⚠️ Внимание: Если ваши ячейки отформатированы как Текст, Excel не сможет выполнить вычитание. Проверьте формат через Главная → Формат → Формат ячеек → Дата или Время.

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

☑️ Подготовка данных для расчета часов

Выполнено: 0 / 4

2. Учет ночных смен: когда интервал пересекает полночь

Стандартная формула дает сбой, если работа началась вечером одного дня и закончилась утром следующего. Например, смена с 22:00 01.01.2026 до 06:00 02.01.2026 должна дать 8 часов, но простая разность покажет 32 часа (из-за смены даты).

Решение — использовать функцию МАКС для корректного расчета:

=ЕСЛИ(B2

Здесь +1 добавляет полные сутки к времени окончания, если оно меньше времени начала (то есть перешло на следующий день.

Альтернативный вариант для Excel 365 и Excel 2021:

= (МАКС(B2; A2) - МИН(B2; A2)) * 24

3. Исключаем выходные и праздники: функция РАБДЕНЬ

Для расчета рабочих часов с учетом выходных (суббота-воскресенье) и праздников понадобится комбинация функций РАБДЕНЬ.МЕЖД и ВРЕМЯ. Этот метод актуален для табелей учета рабочего времени или расчета оплаты по фактически отработанным часам.

Базовая формула:

= (РАБДЕНЬ.МЕЖД(A2; B2; [Праздники]) - 1)  24 + (1 - ВРЕМЯ(A2))  24 + ВРЕМЯ(B2) * 24

Где:

  • 📅 [Праздники] — диапазон с датами праздников (например, D2:D10)
  • ⏱️ (1 - ВРЕМЯ(A2)) * 24 — часы с начала рабочего дня до времени старта
  • ВРЕМЯ(B2) * 24 — часы с времени окончания до конца рабочего дня

Пример для 8-часового рабочего дня (с 9:00 до 18:00) с выходными суббота-воскресенье:

НачалоКонецПраздникиФормулаРезультат (часы)
01.01.2026 09:0005.01.2026 18:0001.01;02.01;08.03= (РАБДЕНЬ.МЕЖД(A2;B2;D2:D4)-1)*24 + (ВРЕМЯ(B2)-ВРЕМЯ(A2))*2424
10.01.2026 10:0012.01.2026 17:00-= (РАБДЕНЬ.МЕЖД(A3;B3)-1)*24 + (ВРЕМЯ(B3)-ВРЕМЯ(A3))*2415
⚠️ Внимание: Функция РАБДЕНЬ.МЕЖД доступна только в Excel 2010 и новее. Для Excel 2007 используйте РАБДЕНЬ с дополнительными вычислениями.

4. Расчет с учетом перерывов: вычитаем нерабочее время

Если в рабочем графике предусмотрены перерывы (например, обед с 13:00 до 14:00), их нужно исключить из общего времени. Для этого используем функцию ЕСЛИ с проверкой временных интервалов.

Формула для вычитания фиксированного перерыва:

= (B2 - A2) * 24 - ЕСЛИ(И(ВРЕМЯ(A2)<=ВРЕМЯ("13:00"); ВРЕМЯ(B2)>=ВРЕМЯ("14:00")); 1; 0)

Логика:

  • 🕒 Проверяем, начинается ли смена до 13:00 и заканчивается после 14:00
  • ➖ Если да — вычитаем 1 час (продолжительность перерыва)
  • ✅ Если перерыв не попадает в интервал — вычитаем 0

Для нескольких перерывов (например, два по 15 минут) модифицируем формулу:

= (B2 - A2) * 24 -

ЕСЛИ(И(ВРЕМЯ(A2)<=ВРЕМЯ("10:00"); ВРЕМЯ(B2)>=ВРЕМЯ("10:15")); 0,25; 0) -

ЕСЛИ(И(ВРЕМЯ(A2)<=ВРЕМЯ("15:00"); ВРЕМЯ(B2)>=ВРЕМЯ("15:15")); 0,25; 0)

Как учесть плавающие перерывы?

Если перерывы не фиксированные, а зависят от продолжительности смены (например, 5% от общего времени), используйте формулу:

= (B2 - A2)  24  0,95

где 0,95 — это 95% рабочего времени (5% на перерывы).

5. Продвинутый метод: пользовательская функция на VBA

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

Пример кода для функции WorkingHours, которая учитывает:

  • 📆 Индивидуальные выходные дни (передаются как массив)
  • ⏳ Перерывы (начало и конец указываются в параметрах)
  • 🕐 Рабочие часы (например, с 9:00 до 18:00)
Function WorkingHours(StartDate As Date, EndDate As Date, _

Optional WorkStart As Double = 0.375, _ '9:00 AM

Optional WorkEnd As Double = 0.75, _ '6:00 PM

Optional BreakStart As Double = 0.5417, _ '13:00

Optional BreakEnd As Double = 0.5833, _ '14:00

Optional Holidays As Variant) As Double

Dim TotalHours As Double

Dim CurrentDay As Date

Dim DayStart As Date, DayEnd As Date

Dim IsHoliday As Boolean

' Проверяем корректность дат

If StartDate > EndDate Then

WorkingHours = 0

Exit Function

End If

' Округляем даты до начала и конца рабочего дня

CurrentDay = Int(StartDate)

DayStart = CurrentDay + WorkStart

If StartDate < DayStart Then StartDate = DayStart

CurrentDay = Int(EndDate)

DayEnd = CurrentDay + WorkEnd

If EndDate > DayEnd Then EndDate = DayEnd

' Основной цикл по дням

Do While CurrentDay <= Int(EndDate)

IsHoliday = False

' Проверяем, является ли день выходным (суббота/воскресенье)

If Weekday(CurrentDay, vbMonday) > 5 Then IsHoliday = True

' Проверяем, является ли день праздничным

If Not IsMissing(Holidays) Then

Dim Holiday As Variant

For Each Holiday In Holidays

If Holiday = CurrentDay Then

IsHoliday = True

Exit For

End If

Next Holiday

End If

' Если не выходной, считаем часы

If Not IsHoliday Then

Dim DayStartTime As Date, DayEndTime As Date

DayStartTime = WorksheetFunction.Max(CurrentDay + WorkStart, StartDate)

DayEndTime = WorksheetFunction.Min(CurrentDay + WorkEnd, EndDate)

' Вычитаем перерыв, если он попадает в интервал

Dim BreakStartTime As Date, BreakEndTime As Date

BreakStartTime = CurrentDay + BreakStart

BreakEndTime = CurrentDay + BreakEnd

If DayEndTime > DayStartTime Then

If BreakEndTime > DayStartTime And BreakStartTime < DayEndTime Then

TotalHours = TotalHours + (DayEndTime - DayStartTime) 24 - (BreakEndTime - BreakStartTime) 24

Else

TotalHours = TotalHours + (DayEndTime - DayStartTime) * 24

End If

End If

End If

CurrentDay = CurrentDay + 1

Loop

WorkingHours = TotalHours

End Function

Чтобы использовать эту функцию:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Вставка → Модуль).
  3. Сохраните файл как .xlsm (с поддержкой макросов).
  4. В ячейке Excel введите: =WorkingHours(A2; B2; 0,375; 0,75; 0,5417; 0,5833; D2:D10)

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

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

ОшибкаПричинаРешение
#ЗНАЧ!Ячейки отформатированы как текстИспользуйте ДАТАЗНАЧ или измените формат на Дата
Неверное количество часовНе учтен переход через полночьДобавьте проверку ЕСЛИ(B2
Отрицательные значенияДаты перепутаны местамиИспользуйте АБС или проверку МАКС/МИН
Некорректный учет выходныхФункция РАБДЕНЬ не учитывает региональные праздникиДобавьте диапазон с праздничными датами вручную
Округление результатаExcel отображает дробные часы (например, 8,25 вместо 8:15)Примените формат [ч]:мм к ячейке с результатом

Критическая ошибка: если вы работаете с временными метками из внешних систем (например, 1С или CRM), проверьте их временную зону. Разница даже в 1 час приведет к искажению результатов на 5-10%.

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

  • 🔹 Интервал в пределах одного дня (например, 09:00–18:00)
  • 🔹 Интервал с переходом через полночь (22:00–06:00)
  • 🔹 Интервал с выходными (пятница–понедельник)

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

Можно ли посчитать часы между датами без указания времени (только даты)?

Да, но результат будет кратен 24 часам. Формула: =(B2-A2)*24. Например, разница между 01.01.2026 и 03.01.2026 составит 48 часов (2 дня × 24 часа).

Как посчитать часы с точностью до минут?

Примените к ячейке с результатом формат [ч]:мм. Например:

  1. Кликните правой кнопкой по ячейке → Формат ячеек.
  2. Выберите категорию Все форматы.
  3. В поле Тип введите [ч]:мм.

Теперь 8,25 часа отобразятся как 8:15.

Почему формула возвращает дату вместо часов (например, 01.01.1900)?

Это происходит из-за неправильного формата ячейки. Excel интерпретирует числовой результат как дату. Решение:

  • Выделите ячейку с формулой.
  • Нажмите Ctrl + 1 (или правая кнопка → Формат ячеек).
  • Выберите формат Общий или Числовой.

Как посчитать часы только за рабочие дни (пн-пт) без праздников?

Используйте комбинацию РАБДЕНЬ.МЕЖД и ВРЕМЯ:

= (РАБДЕНЬ.МЕЖД(A2; B2) - 1) * (ВРЕМЯ(18;0;0) - ВРЕМЯ(9;0;0)) + ЕСЛИ(РАБДЕНЬ.МЕЖД(A2; B2)>0; МИН(B2; ВРЕМЯ(18;0;0)) - МАКС(A2; ВРЕМЯ(9;0;0)); 0)

Здесь ВРЕМЯ(18;0;0) — это 18:00 (конец рабочего дня), а ВРЕМЯ(9;0;0) — 9:00 (начало).

Можно ли автоматически подтягивать праздничные даты из интернета?

В стандартном Excel — нет. Но есть обходные пути:

  • 📥 Power Query: подключитесь к API календаря (например, Google Calendar) и импортируйте праздники.
  • 📊 Office Scripts (Excel Online): напишите скрипт для парсинга данных с сайтов вроде calendar.google.com.
  • 📅 Надстройка: используйте плагины вроде Kutools for Excel (платно).