Зачем считать рабочие дни в Excel и какие ошибки допускают чаще всего
Расчёт рабочих дней в Microsoft Excel — задача, с которой сталкиваются бухгалтеры, HR-специалисты, логисты и менеджеры проектов. Казалось бы, что может быть проще: вычесть выходные и праздники из общего количества дней? Но на практике даже опытные пользователи допускают ошибки: забывают про перенос праздников, не учитывают региональные особенности или используют неэффективные формулы, которые «ломаются» при изменении данных.
Самая распространённая проблема — игнорирование динамических праздников (например, Пасхи или переносимых выходных). Многие просто вручную вычитают фиксированные даты из календаря, но такой подход требует ежегодной корректировки. Другая типичная ошибка — использование функции ДЕНЬНЕД без учёта того, что в разных странах рабочая неделя может начинаться не с понедельника. Например, в Израиле выходные — пятница и суббота, а в ОАЭ — пятница и воскресенье.
В этой статье разберём 5 проверенных способов посчитать рабочие дни в Excel — от базовых формул до автоматизированных решений с учётом праздников и нестандартных графиков. Вы узнаете, как:
- 📅 Использовать встроенные функции
ЧИСТРАБДНИиРАБДЕНЬдля стандартных расчётов; - 🔄 Учитывать переносимые праздники и региональные особенности;
- 📊 Строить динамические таблицы, которые автоматически обновляют количество рабочих дней;
- ⚡ Оптимизировать формулы для больших диапазонов дат (10+ лет).
Способ 1: Базовая формула ЧИСТРАБДНИ для стандартного графика
Функция ЧИСТРАБДНИ (англ. NETWORKDAYS) — самый простой инструмент для расчёта рабочих дней между двумя датами. Она автоматически исключает субботу и воскресенье, но не учитывает праздники. Синтаксис:
=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])
Пример: Чтобы посчитать рабочие дни с 1 января по 31 декабря 2026 года (без праздников), используйте:
=ЧИСТРАБДНИ("01.01.2026"; "31.12.2026")
Результат: 260 рабочих дней (при стандартной 5-дневной неделе).
Если нужно исключить праздники, укажите их в третьем аргументе как диапазон ячеек. Например, создайте список праздников в столбце A2:A10 и модифицируйте формулу:
=ЧИСТРАБДНИ("01.01.2026"; "31.12.2026"; A2:A10)
Форматируйте даты как "ДД.ММ.ГГГГ"|Проверьте, что праздники указаны в отдельном столбце|Используйте абсолютные ссылки для диапазона праздников (например, $A$2:$A$10)|Убедитесь, что в списке праздников нет дубликатов-->
⚠️ Внимание: Функция ЧИСТРАБДНИ не учитывает переносимые выходные (например, если выходной перенесён с субботы на понедельник). Для таких случаев потребуется ручная корректировка или использование VBA.
| Формула | Пример | Результат | Комментарий |
|---|---|---|---|
=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026") |
Январь 2026 | 23 | Без учёта Нового года и Рождества |
=ЧИСТРАБДНИ("01.05.2026"; "10.05.2026"; A2:A3) |
Майские праздники | 4 | В A2:A3 указаны 1 и 9 мая |
=ЧИСТРАБДНИ(СЕГОДНЯ(); СЕГОДНЯ()+30) |
Следующие 30 дней | 21 или 22 | Зависит от текущей даты |
Способ 2: Учёт праздников и переносимых выходных
Для точного расчёта с учётом официальных праздников и переносимых выходных (актуально для России, Украины, Беларуси и других стран СНГ) потребуется:
- Создать список всех праздников на год, включая перенесённые даты (например, если 8 марта выпадает на субботу, выходной переносится на понедельник).
- Добавить в этот список дополнительные нерабочие дни (например, «длинные» майские или новогодние каникулы).
- Использовать функцию
ЧИСТРАБДНИ.МЕЖД(англ.NETWORKDAYS.INTL) для нестандартных выходных.
Пример для России (2026 год):
- 📌 Новый год: 1–8 января (8 дней);
- 📌 23 февраля: перенесён на 25 февраля (понедельник);
- 📌 8 марта: выпадает на пятницу, выходной — 10 марта (понедельник).
Формула с учётом переносимых праздников:
=ЧИСТРАБДНИ.МЕЖД("01.01.2026"; "31.12.2026"; 11; A2:A20)
Где 11 — код для выходных «суббота-воскресенье», а A2:A20 — диапазон с праздниками.
Как узнать код для нестандартных выходных?
Код выходных дней в функции ЧИСТРАБДНИ.МЕЖД формируется как сумма чисел:
- 1 = суббота и воскресенье (стандарт)
- 2 = воскресенье и понедельник
- 11 = только воскресенье
- 12 = понедельник и вторник
- 13 = вторник и среда
и т.д. до 17 (пятница и суббота).
⚠️ Внимание: Если в вашем регионе действуют производственные календари с укороченными рабочими днями (например, 31 декабря), их нужно учитывать отдельно. Функция ЧИСТРАБДНИ считает укороченный день как полный рабочий день.
Способ 3: Динамический расчёт с учётом текущей даты
Если вам нужно автоматически обновлять количество рабочих дней от сегодняшнего дня до конца месяца или квартала, используйте комбинацию функций СЕГОДНЯ, КОНМЕСЯЦА и ЧИСТРАБДНИ.
Пример 1: Рабочие дни до конца текущего месяца:
=ЧИСТРАБДНИ(СЕГОДНЯ(); КОНМЕСЯЦА(СЕГОДНЯ(); 0); Праздники!A:A)
Пример 2: Рабочие дни до конца квартала (с учётом того, что квартал заканчивается 31 марта, 30 июня и т.д.):
=ЧИСТРАБДНИ(СЕГОДНЯ(); ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(СЕГОДНЯ())+3-ОСТАТ(МЕСЯЦ(СЕГОДНЯ()); 3); 1)-1; Праздники!A:A)
Для удобства создайте именованный диапазон для праздников:
- Выделите столбец с датами праздников.
- Перейдите на вкладку
Формулы → Присвоить имя. - Введите имя (например,
Праздники_2026) и нажмитеOK.
Теперь формулу можно упростить:
=ЧИСТРАБДНИ(СЕГОДНЯ(); КОНМЕСЯЦА(СЕГОДНЯ(); 0); Праздники_2026)
Способ 4: Расчёт рабочих дней между двумя датами с учётом сменного графика
Если ваша организация работает по сменному графику (например, 2 через 2, сутки через трое), стандартные функции Excel не подойдут. В этом случае потребуется:
- Создать таблицу с графиком работы (например, в отдельном листе).
- Использовать функцию
СУММПРОИЗВдля подсчёта рабочих дней.
Пример: Допустим, у вас график «день-ночь-отдых-отдых». Создайте таблицу с датами и пометками «Д» (день), «Н» (ночь), «В» (выходной). Затем используйте формулу:
=СУММПРОИЗВ(--(ДиапазонДат>=A2); --(ДиапазонДат<=B2); --(График="Д")) + СУММПРОИЗВ(--(ДиапазонДат>=A2); --(ДиапазонДат<=B2); --(График="Н"))
Где A2 — дата начала периода, B2 — дата конца, ДиапазонДат — столбец с датами, График — столбец с обозначениями смен.
Для автоматизации можно написать пользовательскую функцию на VBA, которая будет учитывать любой график. Пример кода:
Function РабочиеДниСменный(НачДата As Date, КонДата As Date, График As Range) As Long
Dim д As Date, Результат As Long
Результат = 0
For д = НачДата To КонДата
If Not IsError(Application.Match(д, График.Columns(1), 0)) Then
If График.Cells(Application.Match(д, График.Columns(1), 0), 2).Value <> "В" Then
Результат = Результат + 1
End If
End If
Next д
РабочиеДниСменный = Результат
End Function
⚠️ Внимание: При использовании VBA убедитесь, что в настройках безопасности Excel разрешено выполнение макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов).
Способ 5: Визуализация рабочих дней с помощью условного форматирования
Чтобы наглядно отобразить рабочие и выходные дни в календаре, используйте условное форматирование:
- Создайте таблицу с датами на месяц/квартал.
- Выделите диапазон с датами и перейдите на вкладку
Главная → Условное форматирование → Создать правило. - Выберите
Использовать формулу для определения форматируемых ячеек. - Введите формулу для выходных:
=ИЛИ(ДЕНЬНЕД(A1;2)>5; ЧИСЛСТОЛБ(A1;Праздники!A:A)). - Задайте красный цвет заполнения для выходных.
Для рабочих дней создайте второе правило с формулой:
=И(ДЕНЬНЕД(A1;2)<=5; НЕ(ЧИСЛСТОЛБ(A1;Праздники!A:A)))
и зелёным цветом заполнения.
Результат: Календарь с цветовой индикацией, где:
- 🟢 Зелёный — рабочие дни;
- 🔴 Красный — выходные и праздники;
- 🟡 Жёлтый — укороченные дни (дополнительное правило).
Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчёте рабочих дней. Вот самые критичные из них, которые искажают результаты на 10–30%:
- Игнорирование формата дат: Если ячейки с датами отформатированы как текст, функции
ЧИСТРАБДНИвернут ошибку#ЗНАЧ!. Проверяйте формат с помощьюФормат ячеек → Дата. - Неучёт високосных лет: 29 февраля может сбить расчёты, если в списке праздников указано «28.02». Всегда используйте точные даты.
- Переносимые праздники: В России с 2021 года действует правило переноса выходных, если праздник выпадает на субботу или воскресенье. Обновляйте список праздников ежегодно!
- Ошибки в диапазонах: Если в формуле указан неверный диапазон праздников (например,
A1:A10вместоA1:A15), часть праздников не будет учтена.
Чтобы проверить корректность расчётов, сравните результат Excel с официальным производственным календарём вашей страны. Например, для России его публикует Минтруд:
- 📄 Официальный сайт Минтруда РФ;
- 📄 КонсультантПлюс (раздел «Производственный календарь»).
⚠️ Внимание: Если вы работаете с данными за несколько лет, учитывайте изменения в трудовом законодательстве. Например, в 2020 году в России были дополнительные выходные из-за пандемии, а в 2023 — перенос выходных на майские праздники.
FAQ: Ответы на частые вопросы
Как посчитать рабочие дни между двумя датами, если выходные — пятница и суббота?
Используйте функцию ЧИСТРАБДНИ.МЕЖД с параметром 7 (пятница-суббота):
=ЧИСТРАБДНИ.МЕЖД("01.01.2026"; "31.01.2026"; 7; Праздники)
Где Праздники — диапазон с датами праздников.
Можно ли посчитать рабочие часы, а не дни?
Да, для этого:
- Посчитайте количество рабочих дней (например, с помощью
ЧИСТРАБДНИ). - Умножьте результат на количество рабочих часов в день (например, 8):
=ЧИСТРАБДНИ(A1;B1)*8.
Для учёта переработок или укороченных дней потребуется более сложная формула или VBA.
Как автоматически обновлять список праздников каждый год?
Создайте отдельный лист с праздниками и используйте Power Query для импорта данных с официальных источников:
- Перейдите на вкладку
Данные → Получить данные → Из других источников → Из веб. - Вставьте URL с производственным календарём (например, с сайта КонсультантПлюс).
- Преобразуйте данные и загрузите их в Excel.
Теперь список праздников будет обновляться при нажатии Данные → Обновить все.
Почему функция ЧИСТРАБДНИ возвращает ошибку #ИМЯ?
Ошибка #ИМЯ! возникает, если:
- 🔹 Функция введена с опечаткой (например,
ЧИСТРАБДНвместоЧИСТРАБДНИ); - 🔹 Используется англоязычная версия Excel, но функция введена на русском (или наоборот);
- 🔹 В настройках региональных параметров Excel указан неподдерживаемый язык.
Решение: проверьте синтаксис функции или переключитесь на английскую версию (NETWORKDAYS).
Как посчитать рабочие дни в Google Sheets?
В Google Таблицах используйте те же функции, но с английским синтаксисом:
=NETWORKDAYS("01/01/2026", "12/31/2026", B2:B10)— аналогЧИСТРАБДНИ;=NETWORKDAYS.INTL("01/01/2026", "12/31/2026", 1, B2:B10)— аналогЧИСТРАБДНИ.МЕЖД.
Формат дат должен соответствовать региональным настройкам таблицы.