Расчет рабочих дней в месяце — типичная задача для бухгалтеров, HR-специалистов и менеджеров проектов. В Microsoft Excel есть несколько встроенных функций, которые автоматизируют этот процесс, но не все знают, как их правильно применять. Ошибки в подсчете могут привести к неверным выплатам зарплаты, срыву сроков проектов или проблемам с отчетностью.
В этой статье мы разберем 5 проверенных способов подсчета рабочих дней — от базовых формул до учета индивидуальных праздников и сменных графиков. Вы узнаете, как работать с функциями РАБДЕНЬ(), ЧИСТРАБДНИ() и их аналогами, а также научитесь настраивать календарь под специфические нужды вашей компании.
1. Базовый подсчет: функция РАБДЕНЬ() для стандартного графика
Самый простой способ посчитать рабочие дни — использовать функцию РАБДЕНЬ() (в английской версии WORKDAY()). Она автоматически исключает субботы и воскресенья, но не учитывает официальные праздники. Формат функции:
=РАБДЕНЬ(нач_дата; кол_дней; [праздники])
Чтобы посчитать количество рабочих дней между двумя датами (например, с 1 по 31 января 2026 года), используйте комбинацию с ДАТА():
=РАБДЕНЬ(ДАТА(2026;1;1); 30) - ДАТА(2026;1;1)
Эта формула вернет 22 рабочих дня для января 2026 года (при стандартном графике 5/2). Обратите внимание: третий аргумент [праздники] здесь не указан, поэтому праздничные дни (например, 1-8 января) будут посчитаны как рабочие!
2. Учет праздников: функция ЧИСТРАБДНИ()
Для точного расчета с учетом официальных праздников подходит функция ЧИСТРАБДНИ() (англ. NETWORKDAYS()). Она требует указать диапазон дат и список праздников. Пример для января 2026 года с российскими праздниками:
- Создайте на листе список праздников (например, в ячейках
D1:D10):01.01.202602.01.2026
...
08.01.2026
- Используйте формулу:
=ЧИСТРАБДНИ(ДАТА(2026;1;1); ДАТА(2026;1;31); D1:D10)
Результат — 17 рабочих дней (с учетом новогодних каникул). Важно: формат дат в списке праздников должен совпадать с форматом ячеек в вашей таблице. Если Excel не распознает даты, используйте функцию ДАТАЗНАЧ() для преобразования текста в дату.
Как быстро создать список праздников?
Можно скопировать официальный производственный календарь с сайта правительства или использовать готовые шаблоны Excel. Например, на сайте КонсультантПлюс ежегодно публикуют актуальные даты праздников и переносов выходных.
3. Расчет для нестандартных графиков (сменная работа, 2/2)
Если ваша компания работает по графику сутки через трое или другому нестандартному расписанию, стандартные функции Excel не подойдут. В этом случае нужно:
- 📅 Создать отдельную таблицу с графиком работы (например, в столбце А — даты, в столбце B — статус "рабочий/выходной")
- 📊 Использовать функцию
СЧЁТЕСЛИ()для подсчета рабочих дней:=СЧЁТЕСЛИ(B1:B31; "рабочий") - 🔄 Автоматизировать процесс с помощью
ВПР()илиИНДЕКС/ПОИСКПОЗдля больших периодов
Пример таблицы для графика 2 через 2:
| Дата | Статус | Смена |
|---|---|---|
| 01.01.2026 | Выходной | — |
| 02.01.2026 | Выходной | — |
| 03.01.2026 | Рабочий | День |
| 04.01.2026 | Рабочий | Ночь |
| 05.01.2026 | Выходной | — |
4. Динамический расчет с учетом текущего месяца
Чтобы формула автоматически подстраивалась под текущий месяц, используйте комбинацию функций СЕГОДНЯ(), ДАТА() и ЧИСТРАБДНИ():
=ЧИСТРАБДНИ(
ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(СЕГОДНЯ()); 1);
КОНМЕСЯЦА(СЕГОДНЯ(); 0);
ДиапазонПраздников
)
Где ДиапазонПраздников — это адрес ячеек со списком праздников. Эта формула всегда будет показывать актуальное количество рабочих дней в текущем месяце. Для предыдущего или следующего месяца замените 0 в функции КОНМЕСЯЦА() на -1 или 1 соответственно.
Создать список праздников на отдельном листе|Проверить формат дат в списке|Назначить диапазону имя через "Формулы → Диспетчер имен"|Протестировать формулу на исторических данных-->
5. Продвинутые техники: массивы и Power Query
Для сложных расчетов (например, подсчета рабочих дней по нескольким филиалам с разными графиками) удобно использовать:
- 🔢 Формулы массива: позволяют обрабатывать несколько условий одновременно. Пример:
Эта формула должна вводиться как массив (Ctrl+Shift+Enter в старых версиях Excel).=СУММ(--(ДЕНЬНЕД(ДАТА(2026;1;СТРОКА(1:31));2)<6);
--(СЧЁТЕСЛИ(Праздники;ДАТА(2026;1;СТРОКА(1:31)))=0)
)
- 📥 Power Query: импортируйте календарь из внешних источников (например, с сайта правительства) и автоматически обновляйте данные.
Критическая особенность: формулы массива могут значительно замедлять работу книги при больших объемах данных (более 10 000 строк). В таких случаях лучше использовать Power Query или VBA.
6. Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при подсчете рабочих дней. Вот самые распространенные:
⚠️ Внимание: Если функцияЧИСТРАБДНИ()возвращает ошибку#ЗНАЧ!, проверьте формат ячеек в диапазоне праздников. Excel воспринимает даты как текст, если ячейки отформатированы как "Общий" или "Текстовый".
- 🗓️ Неучтенные переносы выходных: В России выходные дни иногда переносят (например, если праздник выпадает на субботу). Обновляйте список праздников ежегодно!
- ⏳ Ошибки в диапазонах дат: Формула
=ЧИСТРАБДНИ(А1;Б1)посчитает дни включительно по дату в Б1. Если нужно исключить последний день, используйтеБ1-1. - 🌍 Региональные особенности: В разных странах разные праздники. Для международных компаний создавайте отдельные списки праздников по странам.
7. Автоматизация: создание пользовательской функции на VBA
Если вам регулярно нужно считать рабочие дни с учетом специфических правил (например, "каждая вторая пятница — выходной"), имеет смысл написать собственную функцию на VBA. Пример кода для функции, которая считает рабочие дни с учетом дополнительных выходных по нечетным числам:
Function CustomWorkDays(StartDate As Date, EndDate As Date) As Integer
Dim TotalDays As Integer, i As Date
TotalDays = 0
For i = StartDate To EndDate
If Weekday(i, vbMonday) < 6 And Day(i) Mod 2 = 0 Then
TotalDays = TotalDays + 1
End If
Next i
CustomWorkDays = TotalDays
End Function
Чтобы использовать эту функцию:
- Нажмите
Alt+F11для открытия редактора VBA. - Вставьте код в новый модуль (
Insert → Module). - Сохраните файл как
.xlsm(с поддержкой макросов). - Используйте в Excel как стандартную функцию:
=CustomWorkDays(A1;B1).
⚠️ Внимание: Макросы могут быть заблокированы настройками безопасности Excel. Перед использованием проверьте параметры в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов.
FAQ: Ответы на частые вопросы
Как посчитать рабочие дни за год?
Используйте формулу массива:
=СУММ(
ЧИСТРАБДНИ(
ДАТА(2026;СТРОКА(1:12);1);
КОНМЕСЯЦА(ДАТА(2026;СТРОКА(1:12);1);0);
ДиапазонПраздников
)
)
Вводится как формула массива (Ctrl+Shift+Enter в Excel 2019 и старше).
Можно ли учитывать полупраздничные дни (сокращенный рабочий день)?
Стандартные функции Excel не поддерживают полупраздничные дни. Решения:
- Создайте отдельный столбец с коэффициентами (1 — полный день, 0.5 — полудень) и используйте
СУММПРОИЗВ(). - Напишите пользовательскую функцию на VBA с дополнительным параметром для типа дня.
Почему моя формула возвращает отрицательное число?
Это происходит, если начальная дата позже конечной. Проверьте порядок аргументов в функции. Например, =ЧИСТРАБДНИ(31.01.2026; 01.01.2026;...) вернет отрицательное значение. Исправьте на =ЧИСТРАБДНИ(01.01.2026; 31.01.2026;...).
Как посчитать рабочие дни между сегодняшней датой и концом месяца?
Используйте комбинацию:
=ЧИСТРАБДНИ(СЕГОДНЯ(); КОНМЕСЯЦА(СЕГОДНЯ();0); ДиапазонПраздников)
Для учета текущего дня как рабочего добавьте +1 к результату.
Работает ли это в Google Sheets?
Да, но с поправками:
- Функция
РАБДЕНЬ()называетсяWORKDAY(). - Для учета праздников используйте
NETWORKDAYS()(аналогЧИСТРАБДНИ()). - Формулы массива вводятся без Ctrl+Shift+Enter.