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

Введение: зачем считать рабочие дни и где это применяется

Расчёт рабочих дней между двумя датами — одна из самых востребованных задач в Microsoft Excel и Google Таблицах. Без этого не обойтись при планировании проектов, расчёте зарплаты, определении сроков поставок или контроле дедлайнов. Например, если договор предусматривает выполнение работ за "10 рабочих дней", обычный подсчёт календарных дней даст неверный результат — ведь выходные и праздники не учитываются.

Проблема усложняется, когда нужно исключить не только стандартные выходные (суббота-воскресенье), но и официальные праздники, а также учёсть индивидуальные графики работы (например, сменный режим или пятидневка с плавающими выходными). К счастью, в Excel есть встроенные функции, которые справляются с этой задачей — но их нужно правильно применять. В этой статье разберём все способы: от простых формул до автоматизированных решений с учётом региональных особенностей.

Способ 1: функция РАБДЕНЬ для базового подсчёта

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

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

Где:

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

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

=РАБДЕНЬ("01.05.2026"; "31.05.2026")
⚠️ Внимание: Функция РАБДЕНЬ не учитывает региональные праздники (например, 9 мая в России). Их нужно добавлять вручную в третий аргумент.

Способ 2: учёт праздников и нестандартных выходных

Чтобы исключить из расчёта официальные праздники, создайте отдельный диапазон с их датами. Например, в ячейках D1:D5 перечислите:

ЯчейкаДата праздникаНазвание
D101.01.2026Новый год
D207.01.2026Рождество
D323.02.2026День защитника Отечества
D408.03.2026Международный женский день
D501.05.2026Праздник Весны и Труда

Теперь модифицируйте формулу:

=РАБДЕНЬ("01.05.2026"; "31.05.2026"; D1:D5)

Эта формула вернёт количество рабочих дней в мае 2026 года за вычетом 1 и 9 мая (если они попадают в будни). Для автоматизации можно создать отдельный лист с праздниками на год и ссылаться на него.

📊 Как часто вам нужно учитывать праздники в расчётах?
Ежедневно
Раз в неделю
Раз в месяц
Редико

Способ 3: функция ЧИСТРАБДНИ для точного подсчёта

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

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

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

=ЧИСТРАБДНИ(СЕГОДНЯ(); "30.06.2026"; Лист2!A1:A10)

Где Лист2!A1:A10 — диапазон с праздничными датами.

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

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

Создать список праздников на отдельном листе|Проверить формат дат (должен быть "Дата", а не "Текст")|Указать правильные границы периода (включительно/исключительно)|Проверить региональные особенности (например, перенос выходных)-->

Способ 4: нестандартные графики работы (смены, 2/2, 3/1)

Если ваша организация работает по гибкому графику (например, суббота — рабочий день, а понедельник — выходной), стандартные функции не подойдут. В этом случае используйте комбинацию функций ДЕНЬНЕД (англ. WEEKDAY) и СУММПРОИЗВ.

Пример для графика "2 через 2" (2 дня работы, 2 дня выходных):

  1. Создайте столбец с всеми датами периода (например, с помощью ПОСЛЕДДАТА или ручного заполнения).
  2. В соседнем столбце определите, является ли день рабочим, используя формулу:
    =ЕСЛИ(ИЛИ(MOD(ДЕНЬНЕД(A2;2)-1;4)<2); 1; 0)

    Где A2 — ячейка с датой, а 2 в аргументе ДЕНЬНЕД указывает, что неделя начинается с понедельника.

  3. Просуммируйте единицы (рабочие дни) функцией =СУММ.

Для графика "3 через 1" измените условие на MOD(ДЕНЬНЕД(A2;2)-1;4)<3.

⚠️ Внимание: При таком подходе праздники придётся исключать вручную — либо добавлять дополнительную проверку в формулу, либо вычитать их количество из итоговой суммы.

Способ 5: динамический расчёт с учётом переноса выходных

В России и некоторых других странах практикуется перенос выходных дней при совпадении праздников с субботой/воскресеньем. Например, если 8 марта выпадает на субботу, выходной переносится на понедельник. Чтобы учесть это в Excel:

1. Создайте таблицу с датами перенесённых выходных (их публикует правительство заранее). Например:

ДатаТип
06.01.2026Перенос с 7 января (воскресенье)
09.05.2026Праздник (четверг)
10.05.2026Перенос с 4 января (пятница)

2. Объедините этот список с обычными праздниками и используйте в функции ЧИСТРАБДНИ:

=ЧИСТРАБДНИ(A1; B1; Объединённый_список)

3. Для автоматизации можно написать VBA-макрос, который будет подгружать актуальные данные с официальных сайтов (например, КонсультантПлюс), но это требует навыков программирования.

Как автоматизировать обновление праздников?

Для полной автоматизации можно использовать Power Query в Excel:

1. Подключитесь к веб-источнику с календарём праздников (например, XML/JSON с сайта правительства).

2. Преобразуйте данные в таблицу.

3. Обновите запрос раз в год перед планированием.

Это избавит от ручного ввода, но потребует начальной настройки.

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

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

  • 🗓 Неверный формат дат: Если ячейка отображает дату как текст (выровнена по левому краю), Excel воспримет её как строку, а не как дату. Исправляйте формат через Формат ячеек → Дата.
  • 🔄 Путаница с граничными датами: Функции РАБДЕНЬ и ЧИСТРАБДНИ включают обе граничные даты в расчёт. Если нужно исключить один из дней, корректируйте формулу (см. Способ 3).
  • 🌍 Игнорирование региональных особенностей: В разных странах разные праздники и выходные. Например, в Израиле рабочая неделя — с воскресенья по четверг, а в ОАЭ — с воскресенья по пятницу.
  • Забывают про високосные годы: 29 февраля может сбить расчёты, если в списке праздников не учтён этот день (например, в 2026 году это четверг).

Чтобы проверить корректность расчётов, сравните результат Excel с онлайн-калькуляторами рабочих дней (например, на сайте КонсультантПлюс или Календарь.ру).

Продвинутые лайфхаки: Power Query и VBA

Для сложных задач (например, расчёт рабочих дней для 100+ сотрудников с разными графиками) стандартных функций Excel недостаточно. В таких случаях поможет:

  • 🔧 Power Query: Инструмент для импорта и преобразования данных. Можно подгрузить календарь праздников из интернета и автоматически обновлять его.
  • 🤖 VBA-макросы: Скрипты для создания пользовательских функций. Например, функция, которая учитывает индивидуальные графики выходных для каждого сотрудника.
  • 📊 Сводные таблицы: Если нужно анализировать рабочие дни по месяцам, отделам или проектам, сводные таблицы ускорят процесс.

Пример VBA-функции для подсчёта рабочих дней с учётом кастомных выходных:

Function CustomWorkdays(start_date, end_date, weekend_days As Variant, holidays As Range) As Long

' weekend_days — массив с номерами выходных дней недели (1=воскресенье, 2=понедельник и т.д.)

' holidays — диапазон с праздничными датами

Dim days_count As Long, i As Long

days_count = 0

For i = start_date To end_date

If Not Intersect(holidays, Cells(1, 1).Value = i) And _

Not IsWeekend(Weekday(i), weekend_days) Then

days_count = days_count + 1

End If

Next i

CustomWorkdays = days_count

End Function

Function IsWeekend(day_num As Integer, weekend_days As Variant) As Boolean

Dim i As Integer

For i = LBound(weekend_days) To UBound(weekend_days)

If day_num = weekend_days(i) Then

IsWeekend = True

Exit Function

End If

Next i

IsWeekend = False

End Function

Чтобы использовать эту функцию, вызовите её в ячейке:

=CustomWorkdays(A1; B1; {1,7}; D1:D10)

Где {1,7} — выходные дни (воскресенье и суббота), а D1:D10 — диапазон с праздниками.

FAQ: ответы на частые вопросы

Как посчитать рабочие дни между сегодняшним днём и будущей датой?

Используйте функцию ЧИСТРАБДНИ с СЕГОДНЯ():

=ЧИСТРАБДНИ(СЕГОДНЯ(); "31.12.2026"; праздники)

Где праздники — диапазон с датами. Функция СЕГОДНЯ() всегда возвращает текущую дату.

Можно ли посчитать рабочие часы, а не дни?

Да, но для этого нужно:

  1. Посчитать количество рабочих дней (см. способы выше).
  2. Умножить результат на количество рабочих часов в день (например, 8).

Если нужны точные часы с учётом начала/конца рабочего дня, используйте формулу:

=ЕСЛИ(ЧИСТРАБДНИ(...)>0; (кон_дата-нач_дата)*24; 0)

И скорректируйте результат с учётом рабочего графика.

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

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

  • Добавить в список праздников дату с пометкой (например, "08.03.2026 сокращённый") и вручную скорректировать итоговый результат.
  • Использовать VBA для создания кастомной функции, которая будет учитывать коэффициент (например, 0.5 для полудня).
Почему функция РАБДЕНЬ возвращает ошибку #ЗНАЧ?

Причины и решения:

  • 📅 Неверный формат даты: Проверьте, что ячейки отформатированы как "Дата" (а не "Текст" или "Общий").
  • 🔢 Начальная дата позже конечной: Поменяйте местами аргументы или используйте ЕСЛИ для проверки.
  • 📊 Ошибка в диапазоне праздников: Убедитесь, что диапазон содержит только даты (без пустых ячеек или текста).
Как посчитать рабочие дни в Google Таблицах?

В Google Sheets используются те же функции, но с английскими названиями:

  • =WORKDAY(start_date, end_date, [holidays]) — аналог РАБДЕНЬ.
  • =NETWORKDAYS(start_date, end_date, [holidays]) — аналог ЧИСТРАБДНИ.
  • =TODAY() — аналог СЕГОДНЯ().

Синтаксис и логика работы идентичны Excel.