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

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

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

Проблема в том, что календарные дни ≠ рабочие дни. Если вам нужно рассчитать сроки выполнения проекта, оплату по договору или время доставки, стандартное вычитание дат даст искажённый результат. Например, разница между 1 и 10 января по календарю — 9 дней, но с учётом новогодних каникул рабочих дней там всего 2-3. Вот где на помощь приходят специализированные функции Excel.

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

  • 📅 Считать рабочие дни между двумя датами с автоматическим исключением выходных
  • 🎄 Учитывать официальные праздники (включая переносы выходных)
  • ⚙️ Настраивать нестандартные рабочие недели (например, 2/2 или 3/1)
  • 📊 Визуализировать рабочие периоды на графиках Ганта
📊 Как часто вам нужно считать рабочие дни в Excel?
Ежедневно
Несколько раз в неделю
Редко, но метко
Никогда не пользовался

Базовая функция РАБДЕНЬ(): синтаксис и простые примеры

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

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

Где:

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

Пример: если вам нужно узнать дату через 10 рабочих дней от 1 мая 2026 года, формула будет:

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

Результат: 17 мая 2026 (потому что 1-5 и 8-9 мая — выходные и праздники, если их не указать отдельно).

Как учесть праздники и переносы выходных

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

  1. 📋 Создайте отдельный лист (например, "Праздники") и перечислите там все нерабочие даты в одном столбце.
  2. 🔗 В основной формуле укажите диапазон с этими датами как третий аргумент:
    =РАБДЕНЬ(A2; B2; Праздники!A:A)
  3. 🔄 Для динамического обновления используйте ТАБЛИЦА (Ctrl+T) — тогда при добавлении новых праздников формулы обновятся автоматически.

Пример списка праздников для России (2026 год):

ДатаПраздник
01.01.2026Новый год
02.01.2026Новогодние каникулы
07.01.2026Рождество Христово
23.02.2026День защитника Отечества
08.03.2026Международный женский день
Как автоматически обновлять праздники каждый год?

Создайте отдельную таблицу с формулой, которая прибавляет 365 дней к датам прошлого года, а затем вручную корректируйте переносы выходных (их публикует правительство обычно в октябре). Или используйте Power Query для импорта официального производственного календаря с сайта КонсультантПлюс.

⚠️ Внимание: Если вы работаете с международными проектами, учитывайте, что в разных странах разные праздники. Например, в США День благодарения — плавающий праздник (четвертый четверг ноября), а в Германии Tag der Deutschen Einheit всегда 3 октября.

Расчёт рабочих дней между двумя датами: функция ЧИСТРАБДНИ()

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

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

Примеры использования:

  • 📊 Подсчёт времени выполнения задачи: =ЧИСТРАБДНИ("10.05.2026"; "20.05.2026") → вернёт 7 (если нет праздников)
  • 💰 Расчёт оплаты по договору: =ЧИСТРАБДНИ(A2; B2; Праздники!A:A) * C2, где C2 — дневная ставка
  • ⏳ Контроль дедлайнов: =ЕСЛИ(ЧИСТРАБДНИ(СЕГОДНЯ(); D2) < 3; "Срочно!"; "В порядке")

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

Указаны корректные даты начала и конца периода

Диапазон праздников не содержит пустых ячеек

Формат ячеек с датами — "Дата" (а не "Текст")

Учтён региональный календарь праздников-->

Нестандартные рабочие недели: сменные графики и короткие недели

Что делать, если ваша компания работает по графику 2 через 2 или 3 через 1? Стандартные функции Excel не поддерживают такие схемы, но есть обходные пути:

Способ 1. Использовать функцию ДЕНЬНЕД() с условиями

Создайте вспомогательный столбец, который будет помечать рабочие дни по вашему графику. Например, для графика 5/2 (пятница — короткий день):

=ЕСЛИ(ИЛИ(ДЕНЬНЕД(A2;2)<6; И(ДЕНЬНЕД(A2;2)=6; ЧАС(A2)<12)); 1; 0)

Способ 2. Создать пользовательскую функцию на VBA

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

Function CustomWorkdays(start_date, end_date)

Dim days As Integer, i As Date

days = 0

For i = start_date To end_date

Select Case Weekday(i, vbMonday)

Case 1, 2: days = days + 1 ' Пн, Вт — рабочие

Case 3, 4: days = days + 1 ' Ср, Чт — рабочие

Case 5, 6, 7: ' Пт, Сб, Вс — выходные

End Select

Next i

CustomWorkdays = days

End Function

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

Продвинутые техники: динамические календари и визуализация

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

  1. 📅 Создайте таблицу с датами на месяц/квартал (используйте функцию ДАТА() или автозаполнение).
  2. 🎨 Примените Условное форматирование:
    • Для суббот и воскресений: формула =ИЛИ(ДЕНЬНЕД(A1;2)>5) → красный фон
    • Для праздников: =СЧЁТЕСЛИ(Праздники!A:A; A1) → оранжевый фон
    • Для рабочих дней: зелёный текст
  • 📈 Добавьте сводную таблицу для анализа:
    =СЧЁТЕСЛИ(Б1:Б31; "Рабочий")

    где столбец Б содержит метки "Рабочий"/"Выходной".

  • Для визуализации проектных сроков можно создать диаграмму Ганта:

    • 📊 Используйте Линейчатую диаграмму с накоплением
    • 🔄 В качестве данных укажите даты начала, конца и количество рабочих дней (из ЧИСТРАБДНИ())
    • 🎨 Настройте цвета: синий — рабочие периоды, серый — выходные

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

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

    ОшибкаПричинаРешение
    #ЗНАЧ! Некорректный формат даты (текст вместо даты) Используйте ДАТАЗНАЧ() для преобразования текста в дату
    Неверное количество дней Не учтены региональные праздники Добавьте диапазон праздников в формулу
    Формула не обновляется Диапазон праздников зафиксирован абсолютными ссылками Используйте структурированные ссылки (Таблица1[Праздники])
    Отрицательное число дней Даты перепутаны местами (кон_дата раньше нач_дата) Добавьте проверку: =ЕСЛИ(B2>A2; ЧИСТРАБДНИ(A2;B2); "Ошибка")

    Ещё одна частая проблема — переносы выходных. Например, если праздник выпадает на субботу, выходной переносится на понедельник. Чтобы учесть это:

    1. Скачайте официальный производственный календарь с сайта правительства.
    2. Импортируйте его в Excel через Данные → Из текста/CSV.
    3. Используйте этот список как диапазон праздников в формулах.

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

    Можно ли в Excel посчитать рабочие дни без учёта субботы, но с учётом воскресенья как рабочего дня?

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

    =СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(ДВССЫЛ("A"&ПОИСКПОЗ(A2;A:A;0)&":A"&ПОИСКПОЗ(B2;A:A;0)));2)<>7); --(СЧЁТЕСЛИ(Праздники!A:A; СТРОКА(ДВССЫЛ("A"&ПОИСКПОЗ(A2;A:A;0)&":A"&ПОИСКПОЗ(B2;A:A;0)))))=0)

    Эта формула считает все дни, кроме суббот (7) и праздников.

    Как посчитать рабочие часы между двумя датами, если рабочий день — 8 часов?

    Умножьте результат ЧИСТРАБДНИ() на 8, но учитывайте:

    • Если первый или последний день — неполный, используйте =ЧИСТРАБДНИ(A2;B2)*8 - ЕСЛИ(ДЕНЬНЕД(A2;2)>5;8;0) - ЕСЛИ(ДЕНЬНЕД(B2;2)>5;8;0)
    • Для точного учёта времени используйте функцию РАЗНДАТ() с единицей измерения "h"
    Почему моя формула РАБДЕНЬ() возвращает дату в числовом формате (например, 45342)?

    Excel хранит даты как числа (количество дней с 1 января 1900 года). Чтобы отобразить дату корректно:

    1. Выделите ячейку с формулой.
    2. Нажмите Ctrl+1 (или правая кнопка → Формат ячеек).
    3. Выберите формат Дата (например, 14.03.2001).

    Если нужно оставить числовой формат, но отображать как дату, используйте функцию ТЕКСТ():

    =ТЕКСТ(РАБДЕНЬ(A2;B2); "дд.мм.гггг")
    Можно ли автоматически обновлять список праздников из интернета?

    Да, с помощью Power Query (в Excel 2016+):

    1. Перейдите на вкладку Данные → Получить данные → Из других источников → Из веб.
    2. Вставьте URL производственного календаря (например, с сайта КонсультантПлюс).
    3. Преобразуйте данные в таблицу и загрузите в Excel.
    4. Свяжите диапазон праздников в ваших формулах с этой таблицей.

    Обновляйте данные раз в квартал, так как переносы выходных могут меняться.

    Как посчитать рабочие дни в Google Sheets?

    В Google Таблицах используются аналогичные функции, но с английскими названиями:

    • =WORKDAY(start_date, days, [holidays]) — аналог РАБДЕНЬ()
    • =NETWORKDAYS(start_date, end_date, [holidays]) — аналог ЧИСТРАБДНИ()
    • =WEEKDAY(date, [return_type]) — аналог ДЕНЬНЕД()

    Синтаксис и логика работы идентичны Excel, но в Google Sheets можно импортировать праздники напрямую из Google Calendar.