Подсчёт рабочих дней в Microsoft Excel — задача, с которой сталкивается каждый второй офисный сотрудник. Нужно ли рассчитать сроки проекта, оплату по тарифу «за рабочий день» или просто спланировать дедлайны с учётом выходных? Без точного инструмента здесь не обойтись. К счастью, Excel предлагает сразу несколько способов решить эту задачу — от элементарных функций до гибких пользовательских решений для нестандартных графиков.
Многие ошибочно думают, что достаточно вычесть одну дату из другой и отнять количество выходных «на глаз». Но такой подход даёт погрешность до 20% — особенно если в расчётном периоде попадают государственные праздники или переносы. В этой статье разберём 5 надёжных методов, включая скрытые возможности Excel, о которых не пишут в стандартных руководствах.
Вы узнаете:
- 🔹 Как использовать функцию
ЧИСТРАБДНИдля базового расчёта (даже если вы новичок) - 🔹 Почему
РАБДЕНЬлучше подходит для планирования будущих дат, а не для ретроспективного анализа - 🔹 Как учитывать региональные праздники и переносы выходных (спойлер: потребуется Power Query)
- 🔹 Что делать, если ваша компания работает по графику «2 через 2» или «сутки через трое»
1. Базовый метод: функция ЧИСТРАБДНИ для стандартного графика
Функция ЧИСТРАБДНИ (англ. NETWORKDAYS) — самый простой способ посчитать количество рабочих дней между двумя датами, исключая субботы, воскресенья и указанные праздники. Синтаксис:
=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])
Аргумент [праздники] не обязателен, но если его не указать, Excel проигнорирует все официальные нерабочие дни (например, 1 мая или 9 мая в России). Это критично для точных расчётов!
Пример: подсчитаем рабочие дни между 1 января 2026 и 31 января 2026, учитывая новогодние каникулы (с 1 по 8 января). Формула будет такой:
=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026"; {"01.01.2026";"02.01.2026";"03.01.2026";"04.01.2026";"05.01.2026";"06.01.2026";"07.01.2026";"08.01.2026"})
⚠️ Внимание: Если вы укажете праздники в формате текста (например,"01.01.2026"вместо даты), Excel вернёт ошибку#ЗНАЧ!. Всегда используйте реальные даты или ссылки на ячейки с датами.
Результат для этого примера — 17 рабочих дней (в январе 2026 года при стандартном графике). Если забыть про праздники, Excel покажет 21 день — ошибка в 4 дня!
Формат ячеек с датами — должен быть "Дата", а не "Текст" или "Общий"
Праздники указаны как диапазон ячеек или массив дат, а не текст
Начальная дата меньше или равна конечной (иначе результат будет отрицательным)
Учёт региональных праздников (например, 12 июня в России не является выходным на федеральном уровне)
-->
2. Функция РАБДЕНЬ: когда нужно узнать не «сколько», а «какой»
Если ЧИСТРАБДНИ отвечает на вопрос «сколько рабочих дней между датами?», то РАБДЕНЬ (англ. WORKDAY) решает обратную задачу: какой датой будет N-й рабочий день от заданной точки. Это незаменимо для планирования проектов.
Синтаксис:
=РАБДЕНЬ(начальная_дата; дни; [праздники])
Пример: допустим, сегодня 15 мая 2026, и вам нужно узнать, на какую дату придётся 10-й рабочий день от сегодня. Формула:
=РАБДЕНЬ("15.05.2026"; 10)
Результат — 29 мая 2026 (учитывая, что 18–19 мая — выходные, а 9 мая был праздничным днём, но в мае 2026 он уже прошёл). Если добавить праздники (например, 12 июня), формула автоматически их пропустит.
Power Query здесь не нужен — РАБДЕНЬ справляется сама. Но есть нюанс: функция не учитывает переносы выходных дней (например, когда суббота становится рабочей из-за праздника в понедельник). Для таких случаев потребуется ручная корректировка или макрос.
3. Учёт региональных праздников и переносов выходных
Стандартные функции Excel не знают о региональных особенностях. Например, в Москве 12 июня — рабочий день, а в Татарстане это праздник Сабантуй. Как быть? Есть три варианта:
- Ручной ввод праздников. Создайте отдельный лист с перечнем нерабочих дней и ссылайтесь на него в формулах. Минус: придётся обновлять вручную каждый год.
- Power Query + внешние данные. Подключитесь к API календаря праздников (например, Nager.Date) и автоматически загружайте актуальные данные.
- Надстройка «Праздники РФ». Бесплатные решения для Excel (например, от PlanFix) добавляют встроенный календарь российских праздников с учётом переносов.
Пример настройки через Power Query:
- Перейдите на вкладку
Данные → Получить данные → Из других источников → Из веб. - Введите URL API (например,
https://date.nager.at/api/v3/PublicHolidays/2026/RU). - Преобразуйте данные в таблицу и загрузите в Excel.
- Используйте столбец с датами праздников в формуле
ЧИСТРАБДНИ.
⚠️ Внимание: При импорте праздников через API проверьте, чтобы даты были в правильном формате. Иногда API возвращает строки вроде"2026-01-01"— их нужно преобразовать в даты Excel с помощью=ДАТАЗНАЧ().
| Регион | Дополнительные праздники (2026 год) | Переносы выходных |
|---|---|---|
| Москва | 12 июня (День России) — рабочий | 4 ноября (понедельник) — выходной перенесён с 5 января |
| Татарстан | 25 июня (Сабантуй), 6 мая (День защиты детей) | Переносов нет |
| Крым | 18 марта (День воссоединения) | 20 мая (понедельник) — выходной перенесён с 9 мая |
4. Нестандартные графики работы: сменный режим, сутки через трое
Что делать, если ваша компания работает по графику «2 через 2» или «сутки через трое»? Стандартные функции здесь бессильны — потребуется комбинация из:
- 📅 Вспомогательных столбцов с указанием смен для каждой даты
- 🔄 Функции
ЕСЛИ+Идля проверки рабочих дней - 📊 Power Query или VBA для автоматизации (если период расчёта больше месяца)
Пример для графика «2 через 2» (2 рабочих дня, 2 выходных):
- Создайте столбец с датами от начальной до конечной (функция
=ПОСЛЕД()). - Добавьте столбец «День недели» с формулой
=ДЕНЬНЕД(дата; 2)(где 2 — понедельник=1, воскресенье=7). - В третьем столбце используйте формулу:
=ЕСЛИ(И(MOD(СТРОКА()-1;4)<2; [@[День недели]]<>6; [@[День недели]]<>7); "Рабочий"; "Выходной")Здесь
MOD(СТРОКА()-1;4)обеспечивает чередование 2 рабочих/2 выходных. - Подсчитайте количество ячеек с текстом «Рабочий» функцией
=СЧЁТЕСЛИ().
Для графика «сутки через трое» логика аналогична, но шаг чередования меняется на 4 дня. Главное — не забывать про перекрытие смен (например, если смена начинается в 20:00 1 мая и заканчивается в 20:00 2 мая, оба дня могут считаться рабочими).
Как учитывать ночные смены?
Если рабочий день начинается в одном календарном дне, а заканчивается в другом (например, с 22:00 до 6:00), создайте дополнительный столбец с временем начала смены. Затем используйте формулу вида:
=ЕСЛИ(ИЛИ(
И([@Дата]=D2; [@Время]>=ВРЕМЯ(22;0;0));
И([@Дата]=D2+1; [@Время]<ВРЕМЯ(6;0;0))
); "Рабочий"; "Выходной")
где D2 — ячейка с датой начала смены, а [@Время] — столбец со временем события.
5. Динамические расчёты: как автоматизировать обновление праздников
Ручной ввод праздников каждый год — рутина. Автоматизируем процесс:
Способ 1. Power Query + параметры. Создайте запрос, который загружает праздники из интернета или корпоративного календаря, а затем свяжите его с вашей таблицей. Обновление данных будет происходить при открытии файла или по кнопке.
Способ 2. VBA-макрос. Напишите скрипт, который парсит официальный производственный календарь (например, с сайта КонсультантПлюс) и заполняет лист «Праздники». Пример кода:
Sub UpdateHolidays()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Праздники")
' Здесь код для парсинга или импорта данных
ws.Range("A1").CurrentRegion.ClearContents
' ... (логика заполнения)
MsgBox "Праздники обновлены!", vbInformation
End Sub
Способ 3. Office Scripts (Excel Online). Если вы работаете в веб-версии Excel, используйте Office Scripts для автоматического обновления данных по расписанию.
Пример структуры таблицы для динамического обновления:
| Год | Дата | Название праздника | Тип (федеральный/региональный) |
|---|---|---|---|
| 2026 | 01.01.2026 | Новый год | Федеральный |
| 2026 | 07.01.2026 | Рождество Христово | Федеральный |
| 2026 | 23.02.2026 | День защитника Отечества | Федеральный |
6. Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчёте рабочих дней. Вот самые распространённые:
- 🗓 Неверный формат дат. Если ячейка отформатирована как текст, Excel воспринимает
"01.01.2026"как строку, а не дату. Исправляйте формат черезФормат ячеек → Дата. - 🔄 Перепутанные начальная и конечная даты. Если
ЧИСТРАБДНИ("31.01.2026"; "01.01.2026"), результат будет отрицательным. Используйте=АБС()для защиты от ошибок. - 🎉 Пропущенные праздники. Забыли указать 8 марта или 1 мая? Excel посчитает их как рабочие дни. Всегда проверяйте актуальность списка праздников.
- ⏳ Игнорирование временных зон. Если даты приходят из разных источников (например, UTC и московское время), может возникнуть расхождение в 1 день.
Чтобы минимизировать ошибки, используйте проверку данных:
- Выделите ячейки с датами.
- Перейдите на вкладку
Данные → Проверка данных. - Установите критерий «Дата» и диапазон (например, от 01.01.2020 до 31.12.2030).
⚠️ Внимание: Если вы работаете с датами до 1900 года, Excel может их неправильно интерпретировать. Дело в том, что в Excel даты хранятся как числа (где 1 = 01.01.1900), и для исторических расчётов потребуются специальные функции.
7. Альтернативные инструменты: когда Excel не подходит
Excel — не всегда оптимальное решение для расчёта рабочих дней. Рассмотрите альтернативы:
- 📊 Google Sheets. Функции
NETWORKDAYSиWORKDAYработают аналогично, но есть встроенная интеграция с Google Calendar для автоматического импорта праздников. - 💻 Python (библиотека pandas). Для больших массивов данных (например, расчёт рабочих дней за 10 лет для 1000 сотрудников) Python справится быстрее. Пример кода:
import pandas as pdfrom pandas.tseries.holiday import USFederalHolidayCalendar
cal = USFederalHolidayCalendar()
holidays = cal.holidays(start='2026-01-01', end='2026-12-31')
business_days = pd.bdate_range('2026-01-01', '2026-01-31', freq='C', holidays=holidays)
print(len(business_days)) # Количество рабочих дней
- 📱 Мобильные приложения. Для быстрых расчётов подойдут Days Until (iOS) или Business Days Calculator (Android). Они учитывают локальные праздники и переносы.
Excel остаётся лидером для офисных задач, но если вам нужна автоматизация на уровне предприятия (например, для расчёта зарплаты 10 000 сотрудников), стоит рассмотреть специализированные системы вроде 1C, SAP или Bitrix24.
=ARRAYFORMULA(SUM(--(WEEKDAY(ROW(INDIRECT(A1&":"&B1)))<>1)*(WEEKDAY(ROW(INDIRECT(A1&":"&B1)))<>7)))
где A1 — начальная дата, B1 — конечная. Для учёта праздников добавьте условие *--(ROW(INDIRECT(A1&":"&B1))<>Holidays), где Holidays — диапазон с датами праздников.-->
FAQ: Ответы на частые вопросы
Можно ли в Excel посчитать рабочие дни с учётом полурабочих дней (например, предпраздничные)?
Стандартные функции Excel не поддерживают полурабочие дни. Решения:
- Разбейте такой день на 0.5 в расчётах (например, если 22 февраля — короткий день, считайте его как 0.5 рабочего дня).
- Используйте VBA для создания кастомной функции, которая будет присваивать вес каждому дню.
Пример формулы для полурабочего дня:
=ЧИСТРАБДНИ(A1; B1) + СЧЁТЕСЛИ(ПолурабочиеДни; ">0") * 0.5
где ПолурабочиеДни — диапазон с датами, имеющими вес 0.5.
Как посчитать рабочие дни между датами в Excel Online?
В веб-версии Excel доступны те же функции: ЧИСТРАБДНИ и РАБДЕНЬ. Особенности:
- Для импорта праздников используйте
Данные → Из таблицы/диапазона(если данные хранятся в той же книге). - Power Query работает ограниченно — некоторые источники данных могут быть недоступны.
- Нет поддержки VBA, но можно использовать Office Scripts (аналог макросов для Excel Online).
Почему функция ЧИСТРАБДНИ возвращает ошибку #ИМЯ?
Ошибка #ИМЯ! возникает в трёх случаях:
- Опечатка в названии функции (например,
ЧИСЛОРАБДНЕЙвместоЧИСТРАБДНИ). - Отсутствует надстройка Пакет анализа (актуально для старых версий Excel). Установите её через
Файл → Параметры → Надстройки. - Язык интерфейса Excel отличается от языка формул (например, русский интерфейс, но формулы на английском). Проверьте настройки языка в
Файл → Параметры → Язык.
Решение: используйте английские названия функций (NETWORKDAYS, WORKDAY) — они работают в любой локализации.
Как посчитать рабочие часы между двумя датами (а не дни)?
Для расчёта рабочих часов используйте комбинацию функций:
- Сначала посчитайте количество полных рабочих дней (
ЧИСТРАБДНИ). - Умножьте на количество рабочих часов в день (например, 8).
- Добавьте часы за неполные рабочие дни (начальный и конечный). Для этого используйте:
=(
(ЧИСТРАБДНИ(A1; B1) - 1) * 8 +
ЕСЛИ(ДЕНЬНЕД(A1; 2) < 6; МАКС(0; МИН(ВРЕМЯ(18;0;0); B1 - A1) - ВРЕМЯ(9;0;0)); 0) +
ЕСЛИ(ДЕНЬНЕД(B1; 2) < 6; МАКС(0; ВРЕМЯ(18;0;0) - МАКС(ВРЕМЯ(9;0;0); B1 - НАЧНЕД(B1))); 0)
)
где A1 — дата/время начала, B1 — дата/время конца, а ВРЕМЯ(9;0;0) и ВРЕМЯ(18;0;0) — начало и конец рабочего дня.
Можно ли в Excel учесть индивидуальный график отпусков сотрудников?
Да, но потребуется дополнительная таблица с данными об отпусках. Алгоритм:
- Создайте таблицу с датами отпусков для каждого сотрудника.
- Используйте функцию
СЧЁТЕСЛИМН, чтобы исключить дни отпуска из расчёта:=ЧИСТРАБДНИ(A1; B1) - СЧЁТЕСЛИМН(Отпуска!A:A; ">="&A1; Отпуска!A:A; "<="&B1; Отпуска!B:B; C1)где
Отпуска!A:A— даты отпусков,Отпуска!B:B— имена сотрудников,C1— имя текущего сотрудника.
Для больших команд удобнее использовать Power Pivot или внешние системы учёта рабочего времени.