Зачем считать рабочие дни в Excel и какие подводные камни вас ждут
Расчёт рабочих дней в месяце — задача, с которой сталкиваются бухгалтеры, HR-специалисты, менеджеры проектов и даже фрилансеры. Казалось бы, что может быть проще: вычесть выходные из общего количества дней? Но на практике всё сложнее: праздничные дни, перенос выходных, нестандартные графики работы (например, сменный или скользящий) превращают простую арифметику в головоломку.
Excel предлагает несколько встроенных функций для работы с датами, но не все они интуитивно понятны. Например, функция РАБДЕНЬ() (или WORKDAY в английской версии) на первый взгляд решает проблему, но не учитывает региональные праздники по умолчанию. А если вам нужно посчитать рабочие дни между двумя датами с учётом производственного календаря? Здесь уже потребуется комбинация функций или даже пользовательские решения.
В этой статье мы разберём:
- 📅 Базовые функции Excel для подсчёта рабочих дней (и почему они не всегда работают).
- 🎉 Как добавить праздничные дни в расчёты — от ручного ввода до автоматизации.
- 🔄 Сложные случаи: скользящие выходные, неполные рабочие дни, ночные смены.
- 📊 Практические примеры для HR, бухгалтерии и проектного управления.
Базовые функции Excel для подсчёта рабочих дней
Начнём с азов. В Excel есть две ключевые функции для работы с рабочими днями:
РАБДЕНЬ(нач_дата; кол_дней; [праздники])— возвращает дату, отстоящую на указанное количество рабочих дней от начальной даты. Подходит для планирования сроков.ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])— считает количество рабочих дней между двумя датами. Именно она чаще всего нужна для расчёта отработанного времени.
Пример использования ЧИСТРАБДНИ для подсчёта рабочих дней в марте 2026 года (без учёта праздников):
=ЧИСТРАБДНИ("01.03.2026"; "31.03.2026")
Результат: 22 рабочих дня (март 2026 года включает 31 день, из них 9 выходных по стандартному графику пн-пт).
⚠️ Внимание: По умолчанию Excel считает выходными субботу и воскресенье. Если ваш график другой (например, выходной в пятницу), потребуется доработка формулы.
А что, если в марте есть государственные праздники? Например, 8 Марта (пятница) в России — выходной. Чтобы функция их учла, нужно передать диапазон с датами праздников в третий аргумент:
=ЧИСТРАБДНИ("01.03.2026"; "31.03.2026"; $A$2:$A$3)
Где в ячейках A2:A3 указаны даты праздников (например, 08.03.2026 и 09.03.2026, если выходной перенесён).
Как добавить праздничные дни в расчёты: 3 способа
Праздники — главная головная боль при подсчёте рабочих дней. Их нужно учитывать вручную, и здесь есть несколько подходов:
1. Ручной ввод в отдельный диапазон
Самый простой, но трудоёмкий способ. Создайте на листе таблицу с датами праздников и ссылайтесь на неё в формуле:
| Дата | Название праздника |
|---|---|
| 01.01.2026 | Новый год |
| 07.01.2026 | Рождество |
| 23.02.2026 | День защитника Отечества |
| 08.03.2026 | Международный женский день |
Затем используйте этот диапазон в ЧИСТРАБДНИ:
=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026"; Праздники!$A$2:$A$5)
2. Автоматическое заполнение праздников через Power Query
Если вам нужно работать с большим количеством дат (например, для годового календаря), ручной ввод неэффективен. Power Query позволяет импортировать праздники из внешних источников (например, с сайта правительства или календарных сервисов) и обновлять их автоматически.
Как импортировать праздники через Power Query
1. Перейдите на вкладку Данные → Получить данные → Из других источников → Из веб.
2. Вставьте URL страницы с производственным календарём (например, с сайта КонсультантПлюс).
3. Преобразуйте данные в Power Query: удалите ненужные столбцы, оставьте только даты.
4. Загрузите данные на новый лист и используйте его как источник праздников в формулах.
3. Пользовательская функция VBA для динамического учёта праздников
Для продвинутых пользователей: можно написать макрос, который будет автоматически подгружать праздники из интернета или корпоративной базы данных. Пример кода для добавления праздников из массива:
Function CustomWorkdays(StartDate As Date, EndDate As Date) As Long
Dim Holidays, i As Long
Holidays = Array("01.01.2026", "07.01.2026", "23.02.2026") ' Добавьте свои даты
CustomWorkdays = 0
For i = StartDate To EndDate
If Weekday(i, vbMonday) < 6 And Not IsHoliday(i, Holidays) Then
CustomWorkdays = CustomWorkdays + 1
End If
Next i
End Function
Function IsHoliday(d As Date, Holidays) As Boolean
Dim i As Long
For i = LBound(Holidays) To UBound(Holidays)
If CDate(Holidays(i)) = d Then
IsHoliday = True
Exit Function
End If
Next i
IsHoliday = False
End Function
Эту функцию можно вызвать как обычно: =CustomWorkdays("01.03.2026"; "31.03.2026").
Сложные случаи: нестандартные графики работы
Что делать, если ваша компания работает по скользящему графику (например, 2 через 2) или имеет неполные рабочие дни (например, суббота — короткий день)? Стандартные функции Excel здесь бессильны, но есть обходные пути.
1. Сменный график (например, 2/2)
Для расчёта рабочих дней при графике "2 дня через 2" можно использовать комбинацию функций ЕСЛИ, ДЕНЬНЕД и ОСТАТ. Пример:
=СУММПРОИЗВ(
--(ДЕНЬНЕД(A2:A31;2)<6); ' Пн-Пт
--(ОСТАТ(СТРОКА(A2:A31)-СТРОКА(A$2);4)<2) ' Чередование 2/2
)
Где A2:A31 — диапазон с датами месяца.
2. Неполные рабочие дни (например, суббота — 4 часа)
Если суббота считается рабочим днём, но с сокращённым временем, используйте ЧИСТРАБДНИ с корректировкой:
=ЧИСТРАБДНИ(нач_дата; кон_дата; праздники) +
СЧЁТЕСЛИМН(диапазон_дат; ">="&нач_дата; "<="&кон_дата; ДЕНЬНЕД(диапазон_дат;2); 6) * 0.5
Здесь субботы (ДЕНЬНЕД=6) учитываются как 0.5 рабочего дня.
⚠️ Внимание: При расчёте зарплаты или отпускных неполные дни могут требовать особого учёта в соответствии с Трудовым кодексом. Уточните правила в вашей организации!
Создать список всех праздников и переносов выходных|Проверить график работы компании (стандартный/сменный)|Определить, нужно ли учитывать неполные дни (например, предпраздничные)|Выбрать подходящую функцию Excel или VBA-решение|Протестировать формулу на небольшом периоде-->
Практические примеры для разных задач
Теория — это хорошо, но как применить её на практике? Разберём реальные кейсы.
1. Расчёт отработанных дней для зарплаты
HR-специалистам часто нужно посчитать, сколько дней сотрудник фактически отработал в месяце, учитывая:
- 📅 Больничные и отпуска.
- ✈️ Командировки (могут считаться как рабочие или нет).
- 🎁 Дополнительные выходные (например, за переработку).
Формула для ячейки с датами отсутствия (например, в столбце B):
=ЧИСТРАБДНИ("01.03.2026"; "31.03.2026"; Праздники!$A$2:$A$10) -
СЧЁТЕСЛИМН(Отсутствия!$B$2:$B$100; ">="&"01.03.2026"; "<="&"31.03.2026")
2. Планирование проектов по методологии Agile
В Agile-командах часто используют спринты — фиксированные периоды работы (обычно 2 недели). Чтобы посчитать количество рабочих дней в спринте:
=ЧИСТРАБДНИ(Дата_начала_спринта; Дата_окончания_спринта; Праздники!Диапазон)
Пример для спринта с 4 по 17 марта 2026 года:
=ЧИСТРАБДНИ("04.03.2026"; "17.03.2026"; Праздники!$A$2:$A$3)
Результат: 10 рабочих дней (с учётом 8 Марта).
3. Анализ продаж по рабочим дням
Маркетологам важно сравнивать продажи в рабочие и выходные дни. Для этого можно использовать СУММЕСЛИМН с условием на рабочие дни:
=СУММЕСЛИМН(
Диапазон_продаж;
Диапазон_дат; ">="&нач_дата;
Диапазон_дат; "<="&кон_дата;
Диапазон_дат; "<>"&Праздники!$A$2:$A$10;
Диапазон_дат; ДЕНЬНЕД(Диапазон_дат;2); "<6"
)
Ошибки при расчёте рабочих дней и как их избежать
Даже опытные пользователи Excel допускают ошибки. Вот самые распространённые:
- Неучтённые праздники: Забыли добавить перенос выходных (например, если выходной с субботы перенесли на понедельник).
- Неверный формат дат: Excel может воспринимать даты как текст, если они введены вручную без разделителей (например,
01032026вместо01.03.2026). - Ошибки в диапазонах: Ссылка на диапазон праздников абсолютная (
$A$2:$A$10), но при копировании формулы она "съезжает". - Несовпадение региональных настроек: В американской версии Excel первая неделя начинается с воскресенья (
vbSunday), а в русской — с понедельника (vbMonday).
Как проверить формулу на ошибки?
- 🔍 Используйте
ВЫДЕЛИТЬ ГРУППУ ЯЧЕЕК(вкладкаГлавная→Найти и выделить) для визуализации диапазонов. - 📌 Проверяйте формат ячеек: выделите диапазон с датами и посмотрите формат в меню
Главная→Формат→Формат ячеек. - 🔄 Тестируйте формулу на небольшом периоде (например, 1 неделя) с известным результатом.
⚠️ Внимание: Если ваша формула возвращает#ЗНАЧ!, скорее всего, проблема в несовпадении форматов дат. Попробуйте привести даты к единому формату с помощью функцииДАТАЗНАЧ:
=ЧИСТРАБДНИ(ДАТАЗНАЧ("01.03.2026"); ДАТАЗНАЧ("31.03.2026"); Праздники!$A$2:$A$3)
Автоматизация: как создать универсальный шаблон для расчёта рабочих дней
Если вам приходится часто считать рабочие дни, имеет смысл создать шаблон с готовыми формулами и настройками. Вот что он должен включать:
- Лист "Календарь": Все даты года с пометками о выходных и праздниках (можно сгенерировать через Power Query).
- Лист "Праздники": Диапазон с датами праздников и переносов (обновляется раз в год).
- Лист "Расчёты": Готовые формулы для:
- 📅 Подсчёта рабочих дней в месяце.
- 📊 Анализа отработанного времени по сотрудникам.
- 📈 Планирования проектов (с учётом буферных дней).
Пример структуры шаблона:
| Лист | Содержимое | Пример формулы |
|---|---|---|
| Календарь | Список дат с 01.01.2026 по 31.12.2026 | =ДАТА(2026;1;1) + протянуть вниз |
| Праздники | Дата и название праздника | 01.01.2026, Новый год |
| Расчёты | Рабочие дни в марте 2026 | =ЧИСТРАБДНИ("01.03.2026"; "31.03.2026"; Праздники!$A$2:$A$10) |
Готовый шаблон можно сохранить как файл .xltx (шаблон Excel) и использовать его как основу для новых документов.
FAQ: Ответы на частые вопросы
Как посчитать рабочие дни между двумя датами, если выходные — пятница и суббота?
Используйте функцию ЧИСТРАБДНИ.МЕЖД (или WORKDAY.INTL в английской версии), где можно задать пользовательские выходные:
=ЧИСТРАБДНИ.МЕЖД("01.03.2026"; "31.03.2026"; 7; Праздники!$A$2:$A$10)
Где 7 — код для выходных в пятницу и субботу (11 — для воскресенья и понедельника, 1 — для стандартных субботы-воскресенья).
Можно ли автоматически подгружать праздники из интернета?
Да, с помощью Power Query или VBA. Например, можно парсить данные с сайта КонсультантПлюс (производственный календарь) или подключаться к API календарных сервисов (например, Google Calendar). Для этого потребуются навыки работы с Web-запросами или написания скриптов.
Готовое решение: используйте надстройку "Производственный календарь РФ" для Excel (доступна на сайтах типа Excel-VBA.ru).
Как учитывать предпраздничные дни с сокращённым рабочим временем?
Стандартные функции Excel не различают полные и сокращённые дни. Решения:
- Добавить предпраздничные дни в список праздников и учитывать их как 0.5 дня (см. пример выше).
- Создать отдельный столбец с коэффициентом (1 — полный день, 0.5 — сокращённый) и использовать
СУММПРОИЗВ.
Почему функция ЧИСТРАБДНИ возвращает ошибку #ИМЯ?
Вероятные причины:
- 🔹 Опечатка в названии функции (например,
ЧИСЛОРАБДНЕЙвместоЧИСТРАБДНИ). - 🔹 Английская версия Excel: используйте
NETWORKDAYS. - 🔹 Отсутствует надстройка "Пакет анализа" (в старых версиях Excel). Установите её через
Файл→Параметры→Надстройки.
Как посчитать рабочие дни в Excel Online?
В веб-версии Excel доступны те же функции: ЧИСТРАБДНИ и РАБДЕНЬ. Однако:
- 🔸 Нет поддержки VBA (не получится использовать пользовательские функции).
- 🔸 Power Query доступен, но с ограничениями (например, нельзя подключаться к некоторым внешним источникам).
- 🔸 Для автоматизации праздников придётся вводить их вручную или копировать из десктопной версии.