Разница во времени между двумя датами — одна из самых востребованных вычислительных задач в Microsoft Excel. Будь то расчёт отработанных часов сотрудников, продолжительность проектов или анализ временных интервалов, умение корректно вычитать даты с учётом часов, минут и даже секунд экономит часы ручной работы. Но почему-то именно с этой операцией у пользователей возникает больше всего ошибок: то Excel возвращает странные числа вместо времени, то игнорирует ночные смены, то "теряет" часы при переходе через полночь.
В этой статье мы разберём 5 проверенных способов посчитать часы между датами — от простейших формул до сложных расчётов с учётом рабочего графика, выходных и перерывов. Вы узнаете, как избежать типичных ошибок (например, когда =B2-A2 выдаёт дату 1900-01-01 вместо часов), как правильно оформлять ячейки для временных данных и где скачать готовые шаблоны для автоматического подсчёта. А в конце — бонус: формула для расчёта ночных часов (с 22:00 до 6:00) с учётом пересечения дат.
Если вы никогда раньше не работали с датами в Excel, не переживайте: мы начнём с азов и постепенно дойдём до продвинутых техник. Для опытных пользователей в статье есть раздел с малоизвестными функциями вроде WORKDAY.INTL и MOD, которые позволят учитывать даже нестандартные рабочие недели (например, смены 2 через 2).
Почему Excel ошибается при вычитании дат (и как это исправить)
Самая распространённая ошибка при попытке посчитать часы между датами — это неправильный формат ячеек. Excel хранит даты и время как числа (где 1 = 1 день), но отображает их в человекочитаемом виде только если ячейка имеет формат Дата или Время. Если вы просто введёте 12.05.2026 14:30 в ячейку с форматом Общий, Excel преобразует это в число вроде 45412,60417 — и именно с ним будет работать формула.
Вторая ловушка — переход через полночь. Если ваш временной интервал начинается в 23:00 10.05.2026 и заканчивается в 02:00 11.05.2026, простая формула =Конец-Начало может вернуть неверный результат из-за смены даты. Excel воспринимает это как отрицательное время, если не настроить формат ячейки заранее.
Чтобы избежать этих проблем:
- 📅 Всегда проверяйте формат ячеек с датами: выделите их, нажмите
Ctrl+1(или правой кнопкой → Формат ячеек) и выберите Дата или Время. - ⏱️ Для результата (разницы в часах) используйте формат [ч]:мм (с квадратными скобками!), чтобы Excel не сбрасывал счетчик после 24 часов.
- 🔄 Если формула возвращает дату
1900-01-01, умножьте результат на 24:=(B2-A2)*24.
⚠️ Внимание: Если ваши даты хранятся как текст (например, после импорта из CSV), Excel не сможет их вычесть. Используйте функцию=ДАТАЗНАЧ()или=VALUE()для преобразования.
Способ 1: Простая разница в часах (базовая формула)
Для большинства задач хватит элементарной формулы:
= (Конечная_дата - Начальная_дата) * 24
Где Конечная_дата и Начальная_дата — это ячейки с датой и временем в формате дд.мм.гггг чч:мм. Умножение на 24 преобразует разницу в днях в часы.
Пример: если в ячейке A2 записано 10.05.2026 9:00, а в B2 — 11.05.2026 17:30, формула = (B2-A2)*24 вернёт 32,5 (часов).
Важно:
- 📊 Формат ячейки с результатом должен быть Общий или Числовой (не Время!).
- ⏳ Если нужно отобразить часы и минуты (например,
32:30), используйте формат [ч]:мм. - 🔢 Для округления до целых часов оберните формулу в
=ОКРУГЛ().
Ячейки с датами имеют формат "Дата" или "Время"|Проверено отсутствие текстовых значений (например, "N/A")|Ячейка для результата отформатирована как "[ч]:мм" или "Общий"|Учтён переход через полночь (если интервал >24 часов)-->
Способ 2: Учёт только рабочих часов (с 9:00 до 18:00)
Если вам нужно посчитать только рабочее время между двумя датами (например, для табеля учёта), простой вычитания недостаточно. Здесь поможет комбинация функций МАКС(), МИН() и ЕСЛИ():
=ЕСЛИ(
(Конец >= Время_начала_рабочего_дня) * (Начало < Время_конца_рабочего_дня);
МИН(Конец; Время_конца_рабочего_дня) - МАКС(Начало; Время_начала_рабочего_дня);
0
)
Где:
Время_начала_рабочего_дня=9:00(или ваше значение)Время_конца_рабочего_дня=18:00
Для расчёта за несколько дней используйте эту формулу в сочетании с ЦЕЛОЕ() (количество полных рабочих дней) и ЕСЛИ() для первого/последнего дня. Полный шаблон можно скачать по ссылке в конце статьи.
⚠️ Внимание: Эта формула не учитывает выходные! Для их исключения добавьте проверку сДЕНЬНЕД()илиWORKDAY.INTL()(см. следующий раздел).
| Сценарий | Формула | Результат |
|---|---|---|
| Интервал полностью в рабочее время | =МИН(B2;18:00)-МАКС(A2;9:00) | 8:00 (полный день) |
| Начало до 9:00, конец после 18:00 | =18:00-9:00 | 9:00 (максимум за день) |
| Интервал полностью вне рабочего времени | =0 | 0:00 |
| Переход через полночь (ночная смена) | =ЕСЛИ(A2>B2; (1+B2-A2)*24; (B2-A2)*24) | 10:00 (с 22:00 до 8:00) |
Способ 3: Исключение выходных и праздников
Для расчёта рабочих часов без учёта субботы/воскресенья используйте функцию WORKDAY.INTL (доступна в Excel 2010 и новее). Она возвращает количество полных рабочих дней между датами, а затем вы можете умножить результат на длительность рабочего дня (например, 8 часов):
= (WORKDAY.INTL(Начало; Конец-Начало; [выходные]; [праздники]) - 1) * 8 +
ЕСЛИ(ДЕНЬНЕД(Конец;2)<6; МИН(ВРЕМЯ(18;0;0); Конец) - МАКС(ВРЕМЯ(9;0;0); Конец); 0) -
ЕСЛИ(ДЕНЬНЕД(Начало;2)<6; МИН(ВРЕМЯ(18;0;0); Начало) - МАКС(ВРЕМЯ(9;0;0); Начало); 0)
Параметры:
- 📅
[выходные]— строка вроде"0000011"(где1= выходной, а00000— рабочие дни с понедельника по пятницу). - 🎉
[праздники]— диапазон с датами праздников (необязательно).
Пример для рабочей недели с понедельника по пятницу (8 часов/день) и праздниками в диапазоне D2:D10:
= (WORKDAY.INTL(A2; B2-A2; "0000011"; D2:D10) - 1) * 8 +
ЕСЛИ(ДЕНЬНЕД(B2;2)<6; МИН(ВРЕМЯ(18;0;0); B2) - МАКС(ВРЕМЯ(9;0;0); B2); 0) -
ЕСЛИ(ДЕНЬНЕД(A2;2)<6; МИН(ВРЕМЯ(18;0;0); A2) - МАКС(ВРЕМЯ(9;0;0); A2); 0)
Способ 4: Расчёт ночных часов (с 22:00 до 6:00)
Для учёта ночных часов (например, для оплаты по повышенному тарифу) нужна формула, которая учитывает переход через полночь. Вот универсальное решение:
=ЕСЛИ(
(ВРЕМЯ(22;0;0) <= ВРЕМЯ(ЧАС(A2);МИНУТЫ(A2);СЕКУНДЫ(A2))) +
(ВРЕМЯ(6;0;0) >= ВРЕМЯ(ЧАС(B2);МИНУТЫ(B2);СЕКУНДЫ(B2))) < 2;
МАКС(0; МИН(B2; ВРЕМЯ(6;0;0) + (A2 > B2)) - МАКС(A2; ВРЕМЯ(22;0;0)));
МАКС(0; МИН(B2; ВРЕМЯ(6;0;0) + 1) - МАКС(A2; ВРЕМЯ(22;0;0))) +
ЕСЛИ(A2 < B2; МИН(B2; ВРЕМЯ(6;0;0)) - ВРЕМЯ(0;0;0); 0)
)
Критичный нюанс: эта формула корректно работает только если ячейки A2 и B2 содержат полные дату и время (например, 10.05.2026 23:00). Если у вас только время без даты, добавьте текущую дату с помощью =СЕГОДНЯ()+A2.
Примеры результатов:
- 🌙 Интервал
22:00–06:00→8:00(полная ночная смена). - 🌙 Интервал
20:00–02:00→6:00(с 22:00 до 02:00). - ☀️ Интервал
08:00–17:00→0:00(нет ночных часов).
Почему формула не работает с датами без времени?
Если в ячейке записано только 10.05.2026 (без времени), Excel воспринимает это как 00:00. Чтобы избежать ошибок, всегда используйте полный формат дд.мм.гггг чч:мм или добавляйте время вручную: =A2+ВРЕМЯ(9;0;0) (для 9:00).
Способ 5: Учёт перерывов (например, обед 1 час)
Если в вашем временном интервале есть фиксированные перерывы (например, обед с 13:00 до 14:00), их нужно вычесть из общей разницы. Вот как это сделать:
1. Сначала рассчитайте общую разницу в часах:
= (B2-A2)*24
2. Затем вычтите перерывы с помощью ЕСЛИ():
= (B2-A2)*24 -
ЕСЛИ(И(A2<=ВРЕМЯ(13;0;0); B2>=ВРЕМЯ(14;0;0)); 1; 0) -
ЕСЛИ(И(A2<=ВРЕМЯ(9;30;0); B2>=ВРЕМЯ(9;45;0)); 0,25; 0)
В этом примере учитываются:
- 🍽️ Обед: 1 час (с 13:00 до 14:00).
- ☕ Перерыв на кофе: 15 минут (с 9:30 до 9:45).
Для нескольких перерывов используйте сумму всех вычитаний или создайте отдельную таблицу с временем перерывов и используйте СУММПРОИЗВ().
Типичные ошибки и как их избежать
Даже опытные пользователи Excel иногда сталкиваются с неожиданными результатами при работе с датами. Вот самые частые проблемы и их решения:
1. Формула возвращает дату 1900-01-01 вместо часов
🔹 Причина: Ячейка с результатом имеет формат Дата, а не Общий или [ч]:мм.
🔹 Решение: Измените формат на Общий или умножьте результат на 24.
2. Отрицательное время (например, -5:00)
🔹 Причина: Конечная дата раньше начальной (например, смена с 22:00 до 06:00).
🔹 Решение: Используйте формулу с учётом перехода через полночь:
=ЕСЛИ(B2
3. Формула не учитывает выходные
🔹 Причина: Простое вычитание дат не различает будни и выходные.
🔹 Решение: Замените B2-A2 на WORKDAY.INTL() (см. Способ 3).
4. Результат отображается как ########
🔹 Причина: Ячейка слишком узкая для отображения времени или числа.
🔹 Решение: Расширьте столбец или измените формат на Общий.
5. Формула игнорирует минуты
🔹 Причина: Вы использовали =ОКРУГЛ() или =ЦЕЛОЕ() без учёта дробной части.
🔹 Решение: Для округления до минут используйте =ОКРУГЛ((B2-A2)*1440; 0)/60 (1440 = минут в сутках).
⚠️ Внимание: Если вы импортируете данные из внешних источников (например, 1С или CRM), проверьте, не содержат ли ячейки с датами скрытые символы (пробелы, переносы строк). Используйте=ПЕЧСИМВ()для очистки:=ДАТАЗНАЧ(ПЕЧСИМВ(A2)).
FAQ: Ответы на частые вопросы
Как посчитать часы между датами, если время хранится в отдельных ячейках?
Если дата и время разнесены по разным ячейкам (например, A2 = дата, B2 = время), объедините их с помощью функции =ДАТАВРЕМЯ():
= (ДАТАВРЕМЯ(ГОД(B2); МЕСЯЦ(B2); ДЕНЬ(B2); ЧАС(C2); МИНУТЫ(C2); СЕКУНДЫ(C2)) -
ДАТАВРЕМЯ(ГОД(A2); МЕСЯЦ(A2); ДЕНЬ(A2); ЧАС(B2); МИНУТЫ(B2); СЕКУНДЫ(B2))) * 24
Или проще: = (B2 + C2) - (A2 + B2), если C2 содержит время в формате чч:мм.
Можно ли посчитать часы между датами в Google Таблицах?
Да, все формулы из этой статьи работают и в Google Sheets, за исключением WORKDAY.INTL — там она называется =NETWORKDAYS.INTL. Также в Google Таблицах нет формата [ч]:мм, поэтому для отображения времени >24 часов используйте:
=ТЕКСТ((B2-A2)*24; "[ч]:мм")
Как посчитать часы между датами с учётом часового пояса?
Excel не поддерживает часовые пояса напрямую, но вы можете вручную скорректировать время:
- Добавьте или вычтите разницу в часах (например, для UTC+3:
=B2 - ВРЕМЯ(3;0;0)). - Используйте функцию
=ЧАСОВОЙПОЯС()(только в Excel 365) для автоматической корректировки.
Пример для перевода из UTC в московское время (UTC+3):
= ( (B2 + ВРЕМЯ(3;0;0)) - (A2 + ВРЕМЯ(3;0;0)) ) * 24
Как автоматически закрасить ячейки с переработкой (например, >8 часов)?summary>
Используйте Условное форматирование:
- Выделите диапазон с результатами.
- Перейдите в
Главная → Условное форматирование → Создать правило.
- Выберите Форматировать ячейки, которые содержат.
- Установите условие значение > 8 и выберите цвет заливки (например, красный).
Для динамического порога (например, > стандартной длительности смены) используйте формулу в правиле:
=A2>$С$1
Где $С$1 — ячейка с максимальной нормой часов.
Главная → Условное форматирование → Создать правило.=A2>$С$1$С$1 — ячейка с максимальной нормой часов.Где скачать готовый шаблон для расчёта рабочих часов?
Вы можете скачать бесплатный шаблон Excel с формулами из этой статьи по ссылке (файл включает:
- 📄 Лист с расчётом рабочих часов (с 9:00 до 18:00).
- 📄 Лист с учётом ночных часов (с 22:00 до 6:00).
- 📄 Лист с автоматическим исключением выходных.
- 📄 Пример условного форматирования для переработок.
Шаблон совместим с Excel 2010 и новее, а также с Google Таблицами.