Как в Excel оставить только рабочие дни: от простых формул до автоматизации

Работа с календарными данными в 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 QueryExcel 2016+). С его помощью можно импортировать производственный календарь с сайта правительства РФ или из XML-файла, а затем привязать его к вашим формулам.

=ЕСЛИ(ЕЧИСЛО(ПОИСКПОЗ(A2; Праздники!A:A; 0)); "Праздник"; "Рабочий день")

-->

3. Условное форматирование: визуализация рабочих дней

Если вам нужно не только посчитать, но и визуально выделить рабочие дни в календаре, используйте условное форматирование. Этот метод подходит для создания наглядных графиков или планировщиков.

Алгоритм действий:

  1. Создайте таблицу с датами (например, на месяц вперед).
  2. Выделите диапазон с датами.
  3. Перейдите в Главная → Условное форматирование → Создать правило.
  4. Выберите тип правила "Использовать формулу для определения форматируемых ячеек".
  5. Введите формулу:
    =И(ДЕНЬНЕД(A1;2)<6; ЧИСТРАБДНИ(A1;A1;Праздники!A:A)=1)

    Здесь ДЕНЬНЕД(A1;2)<6 проверяет, что день не суббота (6) или воскресенье (7), а ЧИСТРАБДНИ исключает праздники.

  6. Задайте формат (например, зеленый фон для рабочих дней).

Результат: все рабочие дни будут подсвечены, а выходные и праздники останутся без форматирования.

⚠️ Внимание: При копировании условного форматирования на другие диапазоны 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

Как использовать:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. Сохраните файл как .xlsm (с поддержкой макросов).
  4. Теперь в 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 июня (эти даты также нужно исключить).

Решение:

  1. Создайте список праздников (например, E2:E5).
  2. Добавьте даты отпуска в этот же список или в отдельный диапазон.
  3. Используйте формулу:
    =ЧИСТРАБДНИ("01.06.2026"; "30.06.2026"; E2:E10)

    где E2:E10 включает и праздники, и дни отпуска.

Пример 3: Построение графика дежурств

Задача: составить график дежурств на месяц так, чтобы выходные и праздники были исключены, а дни распределялись между 3 сотрудниками поочередно.

Решение:

  1. Создайте столбец с датами на месяц.
  2. Добавьте столбец с проверкой рабочего дня:
    =ЕСЛИ(И(ДЕНЬНЕД(A2;2)<6; ЧИСТРАБДНИ(A2;A2;Праздники!A:A)=1); "Рабочий"; "")
  3. Используйте функцию =ОСТАТ() для распределения дней между сотрудниками:
    =ЕСЛИ(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 для импорта производственного календаря с официальных источников (например, с сайта правительства или КонсультантПлюс). Алгоритм:

  1. Скачайте календарь в формате Excel или CSV.
  2. В Excel перейдите в Данные → Получить данные → Из файла → Из рабочей книги.
  3. Загрузите данные в Power Query и преобразуйте их в нужный формат.
  4. Создайте запрос, который обновляет данные при открытии файла.

Также можно написать VBA-макрос, который парсит календарь с веб-страницы и обновляет список праздников.

Можно ли использовать эти функции в Google Таблицах?

Да, в Google Sheets есть аналогичные функции:

  • =РАБДЕНЬ()=WORKDAY()
  • =ЧИСТРАБДНИ()=NETWORKDAYS()
  • =ЧИСТРАБДНИ.INTL()=NETWORKDAYS.INTL()

Синтаксис и логика работы идентичны. Однако в Google Таблицах нет встроенной поддержки VBA, поэтому для сложной автоматизации потребуется использовать Google Apps Script.