Работаете с дедлайнами, графиками поставок или производственными планами? Тогда вам точно приходилось считать сроки с учётом только рабочих дней, исключая выходные и праздники. Вручную это делать утомительно — особенно если речь идёт о десятках строк в таблице. К счастью, Microsoft Excel предлагает встроенные функции, которые автоматизируют этот процесс.
Но как именно они работают? Какие подводные камни таят формулы РАБДЕНЬ и ЧИСТРАБДНИ? И что делать, если в вашей стране нестандартные выходные (например, пятница и суббота) или дополнительные праздники? В этой статье разберём всё по полочкам — от базовых примеров до продвинутых сценариев с динамическими диапазонами праздников.
Вы узнаете:
- 🔹 Как прибавить к дате N рабочих дней с учётом выходных (формула
РАБДЕНЬ) - 🔹 Как исключить из расчёта праздничные дни (функция
ЧИСТРАБДНИ) - 🔹 Что делать, если выходные не суббота-воскресенье (настройка
ВЫХОДНОЙ) - 🔹 Как автоматизировать расчёты для целого столбца дат
А в конце статьи — FAQ с ответами на частые ошибки и готовые шаблоны для скачивания.
Базовая формула: РАБДЕНЬ для прибавления рабочих дней
Функция РАБДЕНЬ (англ. WORKDAY) — ваш главный помощник. Она прибавляет к заданной дате указанное количество рабочих дней, автоматически пропуская субботы и воскресенья.
Синтаксис:
=РАБДЕНЬ(нач_дата; дни; [праздники])
- 📅
нач_дата— исходная дата (например,"10.05.2026"или ссылка на ячейкуA2) - ➕
дни— количество рабочих дней для прибавления (может быть отрицательным!) - 🎉
[праздники]— необязательный аргумент: диапазон с датами праздников
Пример 1. Допустим, задача началась 01.06.2026, а срок выполнения — 10 рабочих дней. Формула:
=РАБДЕНЬ("01.06.2026"; 10)
Результат: 13.06.2026 (пропущены 2 выходных — 8 и 9 июня).
Учёт праздников: функция ЧИСТРАБДНИ
А что если в расчётном периоде попадается государственный праздник? Например, 12 июня в России — День независимости. Функция РАБДЕНЬ его проигнорирует, если не указать явным списком.
Для этого используйте ЧИСТРАБДНИ (англ. WORKDAY.INTL) — расширенную версию с поддержкой кастомных выходных и праздников. Синтаксис:
=ЧИСТРАБДНИ(нач_дата; дни; [выходной]; [праздники])
- 📅
нач_датаидни— аналогичноРАБДЕНЬ - 🔄
[выходной]— код выходных дней (по умолчанию1— суббота-воскресенье) - 🎉
[праздники]— диапазон с датами (например,D2:D10)
Пример 2. Добавим к предыдущему примеру праздник 12 июня (ячейка D2 содержит "12.06.2026"):
=ЧИСТРАБДНИ("01.06.2026"; 10; 1; D2)
Результат: 14.06.2026 (с учётом праздника срок сдвинулся на день вперёд).
Коды выходных дней в ЧИСТРАБДНИ
1 — суббота-воскресенье (по умолчанию)
2 — воскресенье-понедельник
3 — понедельник-вторник
...
11 — только воскресенье
12 — только понедельник
13 — только вторник и т.д.
Нестандартные выходные: пятница-суббота и другие варианты
В некоторых странах (например, ОАЭ или Саудовская Аравия) выходные приходятся на пятницу и субботу. Для таких случаев в ЧИСТРАБДНИ предусмотрен аргумент [выходной].
Пример 3. Рассчитаем дату через 5 рабочих дней с выходными в пятницу-субботу:
=ЧИСТРАБДНИ("01.06.2026"; 5; 7)
Код 7 соответствует выходным пятница-суббота. Результат: 07.06.2026 (пропущены 7 и 8 июня).
⚠️ Внимание: Если указать неверный код выходных (например,15), Excel вернёт ошибку#ЧИСЛО!. Полный список кодов см. в спойлере выше.
Для наглядности — таблица соответствия кодов и выходных:
| Код | Выходные дни | Пример стран |
|---|---|---|
1 | Суббота, воскресенье | Россия, США, Европа |
2 | Воскресенье, понедельник | — |
7 | Пятница, суббота | ОАЭ, Саудовская Аравия |
11 | Только воскресенье | Бразилия (частично) |
17 | Суббота (один день) | Непал |
Динамический список праздников: как автоматизировать
Если праздники повторяются ежегодно (например, Новый год или 8 Марта), можно создать динамический диапазон, который будет автоматически обновляться.
Способ 1. Используйте формулу для генерации праздников на текущий год:
=ДАТА(ГОД(СЕГОДНЯ()); 1; 1) // Новый год
=ДАТА(ГОД(СЕГОДНЯ()); 3; 8) // 8 Марта
=ДАТА(ГОД(СЕГОДНЯ()); 5; 1) // 1 Мая
Способ 2. Для "плавающих" праздников (например, Пасха) используйте ВПР или ИНДЕКС с предварительно рассчитанными датами.
Создайте отдельный лист "Праздники"|Укажите даты в формате ДД.ММ.ГГГГ|Присвойте диапазону имя (например, Праздники_2026)|Используйте имя в формуле: =ЧИСТРАБДНИ(A2; B2; ; Праздники_2026)
-->
Пример 4. Допустим, у вас в диапазоне F2:F5 перечислены праздники 2026 года. Формула для ячейки C2:
=ЧИСТРАБДНИ(A2; B2; 1; $F$2:$F$5)
Знак $ фиксирует диапазон праздников при копировании формулы вниз.
Ошибки и решения: почему формула не работает
Даже с простыми функциями иногда возникают ошибки. Рассмотрим типичные проблемы и способы их исправления.
⚠️ Внимание: Если в результате отображается ######, проверьте ширину столбца или формат ячейки. Возможно, дата не помещается в отведённое пространство.
- 🚨 #ИМЯ? — Excel не распознаёт имя функции. Проверьте регистр (должен быть
РАБДЕНЬ, а нерабдень) и локализацию (в английской версии используйтеWORKDAY). - 🚨 #ЗНАЧ! — неверный тип аргумента. Убедитесь, что в ячейках с датами указаны именно даты (а не текст), а количество дней — число.
- 🚨 #ЧИСЛО! — некорректный код выходных (см. спойлер выше).
Лайфхак: Чтобы проверить, распознаёт ли Excel вашу дату как дату, используйте функцию ДАТАЗНАЧ:
=ДАТАЗНАЧ("01.06.2026")
Если результат — число (например, 45450), всё в порядке. Если #ЗНАЧ! — исправляйте формат.
Продвинутые сценарии: рабочие дни между двумя датами
А что если нужно посчитать количество рабочих дней между двумя датами? Например, для расчёта оплаты по договору или длительности проекта.
Используйте функцию ЧИСТРАБДНИ с отрицательным значением дней:
=ЧИСТРАБДНИ(дата_начала; (дата_конца - дата_начала); [выходной]; [праздники])
Пример 5. Сколько рабочих дней между 01.06.2026 и 15.06.2026 (исключая праздники в F2:F5)?
=ЧИСТРАБДНИ("01.06.2026"; ("15.06.2026"-"01.06.2026"); 1; F2:F5)
Результат: 10 (из 14 календарных дней вычтены 4 выходных и 1 праздник).
Для удобства можно создать пользовательскую функцию на VBA, которая будет возвращать количество рабочих дней напрямую:
Function РабДниМежду(StartDate As Date, EndDate As Date, Optional Holidays As Range) As Long
РабДниМежду = Application.WorksheetFunction.NetWorkdays(StartDate, EndDate, Holidays)
End Function
Теперь в Excel используйте:
=РабДниМежду("01.06.2026"; "15.06.2026"; F2:F5)
Готовые шаблоны и альтернативные способы
Если формулы кажутся сложными, воспользуйтесь готовыми решениями:
- 📄 Шаблон календаря с автоматическим подсчётом рабочих дней (скачать можно на Office Templates).
- 🤖 Power Query: импортируйте данные с датами и используйте встроенные функции трансформации для добавления рабочих дней.
- 📊 Google Sheets: функции
WORKDAYиNETWORKDAYSработают аналогично, но с небольшими синтаксическими отличиями.
Критическая особенность: В Google Таблицах функция NETWORKDAYS не поддерживает аргумент [выходной] — для нестандартных выходных придётся использовать Apps Script.
Для комплексных задач (например, расчёт зарплаты с учётом больничных и отпусков) рекомендуем комбинировать ЧИСТРАБДНИ с ЕСЛИ и И:
=ЕСЛИ(И(A2<>""; B2<>""); ЧИСТРАБДНИ(A2; B2; 1; Праздники); "")
FAQ: Ответы на частые вопросы
Как прибавить рабочие дни к текущей дате?
Используйте СЕГОДНЯ() в качестве первого аргумента:
=РАБДЕНЬ(СЕГОДНЯ(); 5)
Формула вернёт дату через 5 рабочих дней от сегодняшнего дня.
Можно ли исключить из расчёта конкретные дни недели (например, среду)?
Стандартными функциями — нет. Но можно создать пользовательскую функцию на VBA, которая будет проверять день недели и прибавлять дни с учётом исключений. Пример кода:
Function CustomWorkday(StartDate As Date, DaysToAdd As Long, Optional ExcludeDays As Variant) As Date
Dim i As Long, CurrentDate As Date
CurrentDate = StartDate
For i = 1 To DaysToAdd
CurrentDate = CurrentDate + 1
Do While Weekday(CurrentDate, vbMonday) = ExcludeDays Or IsHoliday(CurrentDate)
CurrentDate = CurrentDate + 1
Loop
Next i
CustomWorkday = CurrentDate
End Function
Где ExcludeDays — массив дней недели для исключения (например, Array(4) для среды).
Почему результат отличается от ручного подсчёта?
Чаще всего причина в:
- Неучтённых праздниках (проверьте диапазон
[праздники]). - Неверном коде выходных (по умолчанию суббота-воскресенье).
- Формате ячеек: даты должны быть в формате
Дата, а неОбщийилиТекст.
Используйте ФОРМУЛА.ТЕКСТ, чтобы увидеть реальные значения в ячейках:
=ФОРМУЛА.ТЕКСТ(A2)
Как посчитать рабочие дни в обратном порядке (вычесть дни)?
Просто укажите отрицательное значение в аргументе дни:
=РАБДЕНЬ("15.06.2026"; -5)
Результат: 09.06.2026 (5 рабочих дней назад от 15 июня).
Есть ли ограничения на количество дней в формуле?
Технически нет, но:
- Excel поддерживает даты с
01.01.1900по31.12.9999. - При очень больших значениях (например,
+10000 дней) результат может выйти за пределы поддерживаемого диапазона. - Производительность книги может снизиться при расчётах для тысяч строк.