Работа с календарными данными в Microsoft Excel часто требует учета только рабочих дней, исключая выходные и праздники. Это актуально для расчета сроков проектов, планирования графиков, анализа производительности или даже составления отчетов по рабочему времени. Однако стандартные функции Excel по умолчанию не фильтруют автоматически субботы, воскресенья и официальные праздники — их нужно настраивать вручную.
В этой статье вы найдете 5 проверенных способов отсеять нерабочие дни: от базовых формул РАБДЕНЬ() и ЧИСТРАБДНИ() до продвинутых техник с условным форматированием и VBA-макросами. Мы разберем, как адаптировать решения под российский производственный календарь 2026 года (с учетом переносов выходных), а также покажем, как автоматизировать процесс для динамических диапазонов дат. Особое внимание уделим типичным ошибкам, которые приводят к сбоям в расчетах — например, почему формула может вернуть неверное количество дней при пересечении годов.
1. Базовые функции Excel для рабочих дней: РАБДЕНЬ и ЧИСТРАБДНИ
Начнем с двух ключевых функций, которые встроены в Excel специально для работы с рабочими днями. Они доступны во всех версиях программы, начиная с Excel 2007, и не требуют подключения надстроек.
Функция РАБДЕНЬ() (англ. WORKDAY) возвращает дату, отстоящую на заданное количество рабочих дней от начальной даты. Синтаксис:
=РАБДЕНЬ(нач_дата; дни; [праздники])
- 📅 нач_дата — исходная дата в формате Excel (например,
"10.05.2026"или ссылка на ячейку с датой). - ⏳ дни — количество рабочих дней, которое нужно прибавить (положительное число) или отнять (отрицательное).
- 🎉 [праздники] — необязательный диапазон с датами праздников (например,
A2:A10).
Пример: чтобы узнать дату через 15 рабочих дней от сегодня, используйте:
=РАБДЕНЬ(СЕГОДНЯ(); 15)
Важно: по умолчанию функция считает выходными субботу и воскресенье. Чтобы изменить это, потребуется VBA (об этом — в разделе 5).
Функция ЧИСТРАБДНИ() (англ. NETWORKDAYS) подсчитывает количество рабочих дней между двумя датами. Синтаксис:
=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])
Пример: количество рабочих дней между 1 мая и 31 мая 2026 года (с учетом праздников в диапазоне B2:B5):
=ЧИСТРАБДНИ("01.05.2026"; "31.05.2026"; B2:B5)
2. Как исключить праздники: создаем динамический календарь
По умолчанию функции РАБДЕНЬ и ЧИСТРАБДНИ игнорируют только субботы и воскресенья. Чтобы исключить официальные праздники (например, 1 января или 9 мая), нужно передать их в качестве третьего аргумента. Вот как это сделать правильно:
Шаг 1. Создайте на отдельном листе таблицу с праздничными датами. Например:
| Дата | Название праздника |
|---|---|
| 01.01.2026 | Новый год |
| 07.01.2026 | Рождество Христово |
| 23.02.2026 | День защитника Отечества |
| 08.03.2026 | Международный женский день |
| 01.05.2026 | Праздник Весны и Труда |
Шаг 2. В формулах ссылайтесь на этот диапазон. Например, чтобы посчитать рабочие дни между двумя датами с учетом праздников:
=ЧИСТРАБДНИ(A2; B2; Праздники!A2:A10)
⚠️ Внимание: Если в диапазоне праздников есть пустые ячейки или некорректные данные (например, текст вместо даты), Excel вернет ошибку #ЗНАЧ!. Проверяйте формат ячеек с датами!
Шаг 3. Для автоматизации обновления праздников используйте Power Query (в Excel 2016+). С его помощью можно импортировать производственный календарь с сайта правительства РФ или из XML-файла, а затем привязать его к вашим формулам.
=ЕСЛИ(ЕЧИСЛО(ПОИСКПОЗ(A2; Праздники!A:A; 0)); "Праздник"; "Рабочий день")
-->
3. Условное форматирование: визуализация рабочих дней
Если вам нужно не только посчитать, но и визуально выделить рабочие дни в календаре, используйте условное форматирование. Этот метод подходит для создания наглядных графиков или планировщиков.
Алгоритм действий:
- Создайте таблицу с датами (например, на месяц вперед).
- Выделите диапазон с датами.
- Перейдите в
Главная → Условное форматирование → Создать правило. - Выберите тип правила
"Использовать формулу для определения форматируемых ячеек". - Введите формулу:
=И(ДЕНЬНЕД(A1;2)<6; ЧИСТРАБДНИ(A1;A1;Праздники!A:A)=1)Здесь
ДЕНЬНЕД(A1;2)<6проверяет, что день не суббота (6) или воскресенье (7), аЧИСТРАБДНИисключает праздники. - Задайте формат (например, зеленый фон для рабочих дней).
Результат: все рабочие дни будут подсвечены, а выходные и праздники останутся без форматирования.
⚠️ Внимание: При копировании условного форматирования на другие диапазоны Excel автоматически корректирует ссылки на ячейки. Чтобы избежать ошибок, используйте абсолютные ссылки (например, $A$1) для фиксированных диапазонов праздников.
Как добавить переносы выходных?
В российском производственном календаре выходные иногда переносятся (например, если праздник выпадает на субботу, выходной переносится на понедельник). Чтобы учесть это в Excel:
1. Добавьте перенесенные даты в список праздников.
2. Удалите из списка субботу/воскресенье, на которые перенесли выходной.
3. Используйте функцию ЧИСТРАБДНИ.INTL (см. раздел 4) для гибкой настройки выходных дней.
4. Продвинутые функции: ЧИСТРАБДНИ.INTL и РАБДЕНЬ.INTL
В Excel 2010 и новее появились международные версии функций — ЧИСТРАБДНИ.INTL и РАБДЕНЬ.INTL (англ. NETWORKDAYS.INTL и WORKDAY.INTL). Их ключевое преимущество — возможность настраивать, какие дни считать выходными.
Синтаксис:
=ЧИСТРАБДНИ.INTL(нач_дата; кон_дата; [выходные]; [праздники])
- 📅 нач_дата, кон_дата — начальная и конечная даты.
- 🔄 [выходные] — строка или число, определяющее выходные дни. Например:
"0000011"— выходные суббота и воскресенье (стандарт)."0000001"— выходной только воскресенье.11— выходные суббота и воскресенье (числовой эквивалент).1— выходной только воскресенье.
- 🎉 [праздники] — диапазон с датами праздников.
Пример: подсчет рабочих дней между 1 и 30 июня 2026 года, где выходной только воскресенье (а суббота — рабочий день):
=ЧИСТРАБДНИ.INTL("01.06.2026"; "30.06.2026"; 1; Праздники!A:A)
Аналогично работает РАБДЕНЬ.INTL для прибавления рабочих дней с кастомными выходными.
📌 Убедитесь, что даты в формате Excel (не текст)
📌 Проверьте диапазон праздников на пустые ячейки
📌 Выберите правильный шаблон выходных (например, "0000011" для субботы/воскресенья)
📌 Используйте абсолютные ссылки для диапазона праздников (например, $A$1:$A$10)
-->
5. Автоматизация с помощью VBA: создаем пользовательскую функцию
Если вам нужно динамически определять рабочие дни с учетом сложных правил (например, скользящие выходные или региональные праздники), стандартных функций Excel может не хватить. В этом случае поможет VBA (Visual Basic for Applications).
Пример кода для пользовательской функции, которая проверяет, является ли дата рабочим днем (с учетом субботы/воскресенья и праздников):
Function IsWorkDay(d As Date, Optional Holidays As Range) As Boolean
' Проверяем, что день не суббота (6) или воскресенье (7)
If Weekday(d, vbMonday) > 5 Then
IsWorkDay = False
Exit Function
End If
' Проверяем, что день не входит в список праздников
If Not Holidays Is Nothing Then
For Each cell In Holidays
If cell.Value = d Then
IsWorkDay = False
Exit Function
End If
Next cell
End If
IsWorkDay = True
End Function
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в модуль (
Insert → Module). - Сохраните файл как .xlsm (с поддержкой макросов).
- Теперь в Excel можно использовать функцию:
=IsWorkDay(A2; Праздники!A:A)где
A2— ячейка с датой, аПраздники!A:A— диапазон с праздничными датами.
⚠️ Внимание: Макросы могут быть отключены по умолчанию в целях безопасности. Чтобы функция заработала, разрешите выполнение макросов в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов.
Преимущество VBA в том, что вы можете расширять логику — например, добавить проверку на сокращенные дни или региональные праздники. Также макросы позволяют создавать автоматические отчеты по рабочим дням с экспортом в PDF или отправкой по email.
6. Типичные ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при работе с рабочими днями. Вот топ-5 ошибок и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
#ИМЯ? |
Опечатка в названии функции (например, "РАБДНЕЙ" вместо "РАБДЕНЬ"). | Проверьте синтаксис. В русскоязычной версии Excel используйте точку как разделитель аргументов. |
#ЗНАЧ! |
Некорректный формат даты (текст вместо даты) или пустые ячейки в диапазоне праздников. | Используйте функцию =ДАТАЗНАЧ() для преобразования текста в дату. Проверьте диапазон праздников на пустые ячейки. |
| Неверное количество дней | Не учтены переносы выходных или региональные праздники. | Обновите список праздников. Для России скачайте актуальный производственный календарь с сайта КонсультантПлюс. |
| Формула не обновляется | Автоматический пересчет отключен или диапазон праздников не фиксирован. | Включите автоматический пересчет в Формулы → Параметры вычислений → Автоматически. Используйте абсолютные ссылки (например, $A$1:$A$10). |
Ошибка в ЧИСТРАБДНИ.INTL |
Неверный формат строки выходных (например, "00000001" вместо "0000001"). | Проверьте длину строки — она должна быть ровно 7 символов, где 1 — выходной, 0 — рабочий день. |
Еще одна распространенная проблема — пересечение годов. Например, если начальная дата в декабре 2026, а конечная в январе 2026, формула может посчитать праздники неверно, если они заданы только для одного года. Решение: включайте в диапазон праздников даты за оба года.
Также обратите внимание на локальные настройки Excel. Если в параметрах региона установлен формат даты, отличный от российского (например, MM/DD/YYYY вместо DD.MM.YYYY), функции могут интерпретировать даты некорректно. Проверьте настройки в Файл → Параметры → Язык → Региональные параметры.
7. Практические примеры: расчет сроков и графиков
Разберем 3 реальных кейса, где фильтрация рабочих дней необходима, и покажем, как их решить в Excel.
Пример 1: Расчет срока выполнения задачи
Задача: нужно узнать, когда будет завершен проект, если на него отведено 30 рабочих дней, старт — 15 мая 2026 года, а праздники указаны в диапазоне D2:D10.
Решение:
=РАБДЕНЬ("15.05.2026"; 30; D2:D10)
Результат: 07.07.2026 (с учетом праздников в мае-июне).
Пример 2: Подсчет отработанных дней сотрудником
Задача: посчитать, сколько дней сотрудник фактически работал в июне 2026, если он брал отпуск с 10 по 14 июня (эти даты также нужно исключить).
Решение:
- Создайте список праздников (например,
E2:E5). - Добавьте даты отпуска в этот же список или в отдельный диапазон.
- Используйте формулу:
=ЧИСТРАБДНИ("01.06.2026"; "30.06.2026"; E2:E10)где
E2:E10включает и праздники, и дни отпуска.
Пример 3: Построение графика дежурств
Задача: составить график дежурств на месяц так, чтобы выходные и праздники были исключены, а дни распределялись между 3 сотрудниками поочередно.
Решение:
- Создайте столбец с датами на месяц.
- Добавьте столбец с проверкой рабочего дня:
=ЕСЛИ(И(ДЕНЬНЕД(A2;2)<6; ЧИСТРАБДНИ(A2;A2;Праздники!A:A)=1); "Рабочий"; "") - Используйте функцию
=ОСТАТ()для распределения дней между сотрудниками:=ЕСЛИ(B2="Рабочий"; ВЫБОР(ОСТАТ(СТРОКА()-1;3)+1; "Иванов"; "Петров"; "Сидоров"); "")
1. Выделите диапазон с именами.
2. Создайте правило форматирования с формулой =A2="Иванов" и задайте зеленый цвет.
3. Повторите для других сотрудников.-->
FAQ: Ответы на частые вопросы
Как учесть региональные праздники (например, День города)?
Добавьте региональные праздники в общий список праздников. Если праздники повторяются ежегодно (например, День города 12 сентября), создайте отдельный лист с формулами, которые автоматически обновляют даты на текущий год. Например:
=ДАТА(ГОД(СЕГОДНЯ()); 9; 12)
Эта формула всегда будет возвращать 12 сентября текущего года.
Можно ли сделать так, чтобы пятница была выходным, а суббота — рабочим днем?
Да, используйте функцию ЧИСТРАБДНИ.INTL с кастомным шаблоном выходных. Например, строка "0000101" означает, что выходные — четверг (4-й день недели, если считать с понедельника как 0) и воскресенье (6-й день). Для пятницы (5-й день) и воскресенья используйте "000011":
=ЧИСТРАБДНИ.INTL("01.06.2026"; "30.06.2026"; "000011")
Почему функция РАБДЕНЬ возвращает дату раньше, чем начальная?
Это происходит, если вы указываете отрицательное количество дней. Например, =РАБДЕНЬ("10.05.2026"; -5) вернет дату на 5 рабочих дней раньше 10 мая. Проверьте знак аргумента дни.
Как автоматически обновлять список праздников каждый год?
Используйте Power Query для импорта производственного календаря с официальных источников (например, с сайта правительства или КонсультантПлюс). Алгоритм:
- Скачайте календарь в формате Excel или CSV.
- В Excel перейдите в
Данные → Получить данные → Из файла → Из рабочей книги. - Загрузите данные в Power Query и преобразуйте их в нужный формат.
- Создайте запрос, который обновляет данные при открытии файла.
Также можно написать VBA-макрос, который парсит календарь с веб-страницы и обновляет список праздников.
Можно ли использовать эти функции в Google Таблицах?
Да, в Google Sheets есть аналогичные функции:
=РАБДЕНЬ()→=WORKDAY()=ЧИСТРАБДНИ()→=NETWORKDAYS()=ЧИСТРАБДНИ.INTL()→=NETWORKDAYS.INTL()
Синтаксис и логика работы идентичны. Однако в Google Таблицах нет встроенной поддержки VBA, поэтому для сложной автоматизации потребуется использовать Google Apps Script.