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

Почему стандартное вычитание дат не работает для рабочих дней

Вы когда-нибудь пытались рассчитать срок выполнения задачи в Excel, просто отняв количество дней от даты, и получали неверный результат? Дело в том, что стандартное вычитание дат (=B2-A2) учитывает все календарные дни, включая выходные и праздники. А в бизнес-задачах важно оперировать именно рабочими днями — теми, когда компания фактически функционирует.

Например, если вы хотите узнать, когда будет готова отчетность, отправленная на проверку 1 июня на 5 рабочих дней, то привычная формула =A1+5 даст 6 июня. Но на самом деле, с учетом выходных (2-3 июня), правильный срок — 8 июня. Именно для таких случаев в Excel есть специализированные функции.

В этой статье мы разберем:

  • 🔹 Как работает функция РАБДЕНЬ и ее расширенная версия ЧИСТРАБДНИ
  • 🔹 Как учитывать индивидуальные праздничные дни вашей компании
  • 🔹 Типичные ошибки при расчетах и как их избежать
  • 🔹 Продвинутые сценарии: динамические диапазоны праздников и кросс-платформенные решения
📊 Как часто вы работаете с датами в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

Базовая формула: функция РАБДЕНЬ

Функция РАБДЕНЬ (англ. WORKDAY) — это основной инструмент для работы с рабочими днями. Ее синтаксис:

=РАБДЕНЬ(нач_дата; дни; [праздники])

Где:

  • 📅 нач_дата — начальная дата (например, "01.06.2026" или ссылка на ячейку)
  • дни — количество рабочих дней для добавления/вычитания (отрицательное значение вычитает дни)
  • 🎉 [праздники]необязательный диапазон с датами праздников (если не указан, учитываются только выходные)

Пример: чтобы узнать дату через 10 рабочих дней от 15 мая 2026 года (без учета праздников), используйте:

=РАБДЕНЬ("15.05.2026"; 10)

Важный нюанс: по умолчанию функция считает выходными субботу и воскресенье. Если в вашей стране другие выходные (например, пятница и суббота), потребуется дополнительная настройка.

Убедитесь, что начальная дата в формате даты, а не текста|

Проверьте, что количество дней — целое число (не дробное)|

Если используете праздники, создайте отдельный диапазон с датами|

Форматируйте ячейку с результатом как "Дата"-->

Учет праздников: функция ЧИСТРАБДНИ

Для более точных расчетов, когда нужно исключить не только выходные, но и официальные праздники, используйте ЧИСТРАБДНИ (англ. WORKDAY.INTL). Ее ключевое преимущество — гибкость в настройке выходных дней и возможность указать список праздников.

Синтаксис:

=ЧИСТРАБДНИ(нач_дата; дни; [выходные]; [праздники])

Параметр [выходные] позволяет задать собственную конфигурацию выходных. Например:

  • 📅 1 — выходные суббота-воскресенье (стандарт)
  • 📅 11 — выходной только воскресенье
  • 📅 "0000011" — выходные пятница и суббота (страны Ближнего Востока)

Пример с учетом российских праздников в 2026 году (диапазон D2:D10 содержит даты праздников):

=ЧИСТРАБДНИ("01.06.2026"; -5; 1; D2:D10)

Эта формула вычитает 5 рабочих дней от 1 июня 2026 года, пропуская выходные и праздники.

⚠️ Внимание: Если в списке праздников указана дата, которая попадает на выходной, функция ЧИСТРАБДНИ проигнорирует ее. Например, если 8 марта выпадает на субботу, включать его в список праздников не нужно.
Функция Учитывает выходные Учитывает праздники Гибкость выходных
РАБДЕНЬ Да (Sb-Vs) Опционально Нет
ЧИСТРАБДНИ Да (настраиваемо) Опционально Да
ДАТА + дни Нет Нет Нет

Типичные ошибки и как их избежать

Даже опытные пользователи Excel иногда сталкиваются с неожиданными результатами при работе с рабочими днями. Вот наиболее распространенные ошибки:

  1. Формат ячеек: Если начальная дата хранится как текст (например, "01.06.2026" в виде строки), Excel вернет ошибку #ЗНАЧ!. Всегда проверяйте формат ячейки — он должен быть "Дата".
  2. Отрицательные дни: При вычитании дней используйте отрицательное значение (например, -5), а не пытайтесь поменять местами аргументы функции.
  3. Диапазон праздников: Если указать неверный диапазон (например, с пустыми ячейками или текстом), функция проигнорирует праздники или вернет ошибку.

Чтобы проверить формат даты, выделите ячейку и посмотрите на выравнивание: даты по умолчанию выравниваются по правому краю, а текст — по левому. Также можно использовать функцию =ЕЧИСЛО(A1) — она вернет ИСТИНА, если значение распознается как дата.

⚠️ Внимание: В российской локализации Excel разделителем целой и дробной части является запятая (,), а не точка (.). Если вы копируете формулы из англоязычных источников, не забывайте заменять точки на запятые, иначе получите ошибку #ИМЯ?.
Почему функция возвращает ######?

Это означает, что столбец слишком узкий для отображения даты. Расширьте столбец или измените формат ячейки на "Дата" (например, через меню Главная → Формат → Формат ячеек).

Продвинутые сценарии: динамические праздники и кросс-платформенность

В реальных бизнес-задачах часто требуется учитывать переменные праздники (например, Пасха) или синхронизировать расчеты между разными программами. Вот несколько решений:

1. Динамические праздники: Создайте отдельную таблицу с формулами для расчета подвижных праздников. Например, для Пасхи в 2026 году:

=ДАТА(2026;4;5)+ПОИСКПОЗ(ДЕНЬНЕД(ДАТА(2026;4;5));{1;2;3;4;5;6;7};0)

Эта формула находит первое воскресенье после 5 апреля (базовая дата Пасхи в 2026 году).

2. Экспорт в Google Sheets: Формулы РАБДЕНЬ и ЧИСТРАБДНИ работают и в Google Таблицах, но есть нюансы:

  • 🔄 В Google Sheets разделитель аргументов — запятая (,), даже в русской версии.
  • 🔄 Функция ЧИСТРАБДНИ называется WORKDAY.INTL (без перевода).
  • 🔄 Для обозначения выходных используется строка (например, "0000011"), а не число.

3. Интеграция с Power Query: Если праздники хранятся в внешнем источнике (например, в Google Calendar или корпоративной базе), используйте Power Query для автоматического импорта дат:

let

Источник = Excel.CurrentWorkbook(){[Name="Праздники"]}[Content],

ИзмененныйТип = Table.TransformColumnTypes(Источник,{{"Дата", type date}})

in

ИзмененныйТип

Альтернативные подходы: без встроенных функций

Если по какой-то причине вы не можете использовать РАБДЕНЬ или ЧИСТРАБДНИ (например, работаете в старой версии Excel), вот два обходных пути:

1. Ручное вычитание с проверкой дня недели:

=ЕСЛИ(ИЛИ(ДЕНЬНЕД(A1;2)>5; ЧИСЛО(A1=ДатаПраздника1; ...)); РАБДЕНЬ(A1; дни-1); A1+дни)

Этот метод требует вручную перечислить все праздники в условии, что неудобно при большом их количестве.

2. Пользовательская функция на VBA:

Откройте редактор VBA (Alt + F11), вставьте новый модуль и добавьте код:

Function CustomWorkday(startDate As Date, days As Integer, Optional holidays As Range) As Date

Dim i As Integer, hDay As Variant

CustomWorkday = startDate

For i = 1 To Abs(days)

CustomWorkday = CustomWorkday + Sgn(days)

Do While Weekday(CustomWorkday, vbMonday) > 5 Or _

(Not holidays Is Nothing And _

Not Intersect(holidays, holidays.Parent.Range(CustomWorkday))) Is Nothing)

CustomWorkday = CustomWorkday + Sgn(days)

Loop

Next i

End Function

Теперь в Excel можно использовать =CustomWorkday(A1; -5; D2:D10).

⚠️ Внимание: Макросы VBA отключены по умолчанию в Excel из соображений безопасности. Чтобы пользовательская функция заработала, перейдите в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов и выберите "Включить все макросы" (только для доверенных файлов!).

Практические примеры для бизнеса

Рассмотрим реальные кейсы, где вычитание рабочих дней критично для бизнес-процессов:

1. Сроки доставки:

Курьерская служба гарантирует доставку за 3 рабочих дня. Если заказ оформлен 30 мая 2026 года (четверг), когда клиент получит посылку?

=РАБДЕНЬ("30.05.2026"; 3)

Результат: 5 июня 2026 года (пропускаем 1-2 июня — выходные).

2. Оплата счетов:

Счет должен быть оплачен в течение 10 рабочих дней с 10 июня 2026 года (понедельник). Последний день оплаты:

=ЧИСТРАБДНИ("10.06.2026"; 10; 1; E2:E5)

Где E2:E5 — диапазон с праздниками (например, 12 июня — День России). Результат: 26 июня 2026 года.

3. График дежурств:

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

=ЕСЛИОШИБКА(РАБДЕНЬ($A$1; СТРОКА(A1)-1; Праздники); "")

Протяните ее вниз на нужное количество строк, и вы получите список рабочих дней подряд.

FAQ: Частые вопросы по вычитанию рабочих дней

Можно ли вычесть рабочие дни без учета праздников?

Да, просто не указывайте третий аргумент в функции РАБДЕНЬ. Например, =РАБДЕНЬ("01.06.2026"; -3) вычтет 3 рабочих дня от 1 июня, игнорируя праздники, но учитывая субботу и воскресенье.

Как узнать количество рабочих дней между двумя датами?

Используйте функцию ЧИСТРАБДНИ с нулевым сдвигом:

=ЧИСТРАБДНИ(нач_дата; кон_дата - нач_дата; 1; праздники) - (кон_дата - нач_дата)

Или проще — функцию ЧИСТРАБДНИ.МЕЖД (англ. NETWORKDAYS.INTL):

=ЧИСТРАБДНИ.МЕЖД("01.06.2026"; "30.06.2026"; 1; D2:D10)
Почему моя формула возвращает #ИМЯ?

Это происходит, если:

  • Вы используете англоязычное название функции (например, WORKDAY вместо РАБДЕНЬ).
  • В формуле есть опечатка (проверьте регистр и символы).
  • Вы забыли поставить точку с запятой (;) между аргументами.

Решение: сравните вашу формулу с примерами из этой статьи.

Как учитывать полупраздничные дни (сокращенный рабочий день)?

Стандартные функции Excel не поддерживают полупраздничные дни. Решения:

  1. Используйте коэффициент: например, вместо 1 дня указывайте 0.5 для полупраздников.
  2. Напишите пользовательскую функцию на VBA, которая будет учитывать веса дней.
  3. Добавьте дополнительный столбец с весами и корректируйте результат вручную.
Работает ли это в Excel Online?

Да, функции РАБДЕНЬ и ЧИСТРАБДНИ поддерживаются в Excel Online, но:

  • В англоязычной версии используйте WORKDAY и WORKDAY.INTL.
  • Пользовательские функции VBA не работают в онлайн-версии.
  • Диапазоны праздников должны быть в том же файле (внешние ссылки не поддерживаются).