Почему стандартный подсчёт дней в Excel не подходит для рабочих графиков
Вы когда-нибудь пробовали вычесть одну дату из другой в Microsoft Excel, чтобы узнать количество дней между ними? На первый взгляд всё просто: формула =B2-A2 даёт разницу в календарных днях. Но что, если вам нужно посчитать исключительно рабочие дни, исключая выходные и праздники? Здесь стандартный подход не сработает.
Проблема в том, что календарные дни включают субботы, воскресенья и официальные праздники — а они редко совпадают с рабочим графиком компании. Например, между 1 и 10 января 2026 года прошло 9 календарных дней, но только 4 из них были рабочими (с учётом новогодних каникул). Если не учитывать эти нюансы, финансовые расчёты, сроки выполнения задач или графики проектов будут искажены.
К счастью, в Excel есть специализированные функции для таких задач. Но их нужно не только знать, но и правильно применять — с учётом региональных особенностей, сменных графиков и индивидуальных исключений. Далее разберём все способы, от базовых до продвинутых.
Базовая функция ЧИСТРАБДНИ: как исключить выходные
Самый простой способ посчитать рабочие дни — использовать функцию ЧИСТРАБДНИ (англ. NETWORKDAYS). Она автоматически исключает субботы и воскресенья из расчёта. Синтаксис функции:
=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])
Где:
- 📅
нач_дата— начальная дата периода (например,"01.01.2026"или ссылка на ячейкуA2). - 📅
кон_дата— конечная дата периода. - 🎉
[праздники]— необязательный аргумент: диапазон ячеек с датами праздников (например,D2:D10).
Пример без учёта праздников:
=ЧИСТРАБДНИ("01.01.2026"; "10.01.2026")
Результат: 7 рабочих дней (хотя на самом деле с 1 по 10 января 2026 года рабочих дней было 4 — функция не знает про новогодние каникулы!).
Учёт праздников и нерабочих дней: расширенный синтаксис
Чтобы функция ЧИСТРАБДНИ учитывала праздники, нужно передать ей третий аргумент — диапазон ячеек с датами нерабочих дней. Например, если в ячейках D2:D5 указаны даты: 1, 2, 3, 4 и 5 января 2026 года, формула примет вид:
=ЧИСТРАБДНИ("01.01.2026"; "10.01.2026"; D2:D5)
Теперь результат будет корректным: 4 рабочих дня (с 8 по 10 января, так как 6 и 7 января — выходные).
Где взять список праздников? Варианты:
- 📥 Скачать официальный производственный календарь для вашей страны (например, с сайта правительства или Минтруда).
- 📅 Ввести вручную в отдельный столбец (если праздников мало).
- 🤖 Автоматизировать загрузку через Power Query или макрос VBA (для продвинутых пользователей).
Важно: функция ЧИСТРАБДНИ считает праздники как отдельные нерабочие дни, но не проверяет, попадают ли они на выходные. Например, если праздник выпадает на воскресенье, он не увеличит количество рабочих дней (в отличие от переноса выходных по трудовому кодексу).
Функция РАБДЕНЬ: когда нужно узнать конечную дату проекта
Если ЧИСТРАБДНИ считает количество рабочих дней между двумя датами, то функция РАБДЕНЬ (англ. WORKDAY) решает обратную задачу: она прибавляет рабочие дни к начальной дате, чтобы найти конечную. Это полезно для планирования проектов.
Синтаксис:
=РАБДЕНЬ(нач_дата; дни; [праздники])
Пример: если проект начинается 10 января 2026 года и длится 10 рабочих дней, то завершится он:
=РАБДЕНЬ("10.01.2026"; 10; D2:D5)
Результат: 24 января 2026 года (с учётом выходных и праздников из диапазона D2:D5).
Указать точную начальную дату проекта|Проверить список праздников на актуальность|Учесть перенос выходных (если есть)|Продублировать расчёт для буферного времени-->
Нерабочие дни по индивидуальному графику: ЧИСТРАБДНИ.МЕЖД
Не все компании работают по стандарту "5/2" (5 рабочих дней, 2 выходных). Например, в некоторых странах выходные — пятница и суббота, а в торговле или медицине график может быть сменным. Для таких случаев в Excel есть функция ЧИСТРАБДНИ.МЕЖД (англ. NETWORKDAYS.INTL).
Её синтаксис:
=ЧИСТРАБДНИ.МЕЖД(нач_дата; кон_дата; [выходные]; [праздники])
Аргумент [выходные] позволяет задать собственные выходные дни. Он может быть:
- 🔢 Числом (например,
1— выходной только воскресенье,11— суббота и воскресенье). - 📝 Строкой (например,
"0000011", где1— выходной,0— рабочий день; здесь выходные — суббота и воскресенье).
Пример для графика с выходными в пятницу и субботу:
=ЧИСТРАБДНИ.МЕЖД("01.01.2026"; "10.01.2026"; "0000110"; D2:D5)
Как расшифровать строку выходных в ЧИСТРАБДНИ.МЕЖД?
Строка состоит из 7 символов, где каждый соответствует дню недели с понедельника по воскресенье. "0" — рабочий день, "1" — выходной. Например:
- "0000011" — выходные суббота и воскресенье (стандарт).
- "1000001" — выходные понедельник и воскресенье.
- "0010011" — выходные среда, суббота и воскресенье.
Ошибки и ловушки: что может пойти не так
Даже с правильными функциями в расчётах рабочих дней легко ошибиться. Вот типичные проблемы и как их избежать:
⚠️ Внимание: Если начальная дата позже конечной, функцияЧИСТРАБДНИвернёт отрицательное число. Это не ошибка, но может сбить с толку. Используйте=АБС(ЧИСТРАБДНИ(...)), чтобы получить модуль значения.
Другие распространённые ошибки:
| Проблема | Причина | Решение |
|---|---|---|
Функция возвращает #ЗНАЧ! |
Некорректный формат даты (например, текст вместо даты) | Проверить формат ячеек (Формат → Ячейки → Дата) |
| Не учитываются праздники | Диапазон праздников не указан или пуст | Добавить третий аргумент с ссылкой на ячейки с датами |
| Некорректный результат для перенесённых выходных | Функция не знает про перенос (например, если выходной перенесли с субботы на понедельник) | Вручную добавить перенесённый день в список праздников |
Ошибка #ИМЯ? |
Опечатка в названии функции (например, ЧИСЛОРАБДНИ вместо ЧИСТРАБДНИ) |
Проверить синтаксис и регистр (в русскоязычном Excel регистр не важен) |
⚠️ Внимание: Если вы копируете формулу с английской версии Excel (например,=NETWORKDAYS), она не заработает в русскоязычной версии без русификации. Используйте=ЧИСТРАБДНИили настройте язык формул вФайл → Параметры → Формулы → Работа с формулами.
Продвинутые приёмы: динамические диапазоны и Power Query
Для сложных задач — например, если праздники меняются каждый год или нужно учитывать региональные особенности — стандартных функций может быть недостаточно. Рассмотрим два продвинутых подхода:
1. Динамические именованные диапазоны для праздников
Создайте именованный диапазон (например, Праздники_2026), который автоматически обновляется при добавлении новых дат. Для этого:
- Выделите столбец с праздниками.
- Перейдите в
Формулы → Присвоить имя. - Введите имя (например,
Праздники) и нажмитеOK. - Используйте имя в формуле:
=ЧИСТРАБДНИ(A2; B2; Праздники).
2. Автоматическая загрузка производственного календаря через Power Query
Если вам нужно ежегодно обновлять список праздников, можно настроить автоматическую выгрузку данных с официальных источников:
- Перейдите в
Данные → Получить данные → Из других источников → Из веб. - Вставьте URL производственного календаря (например, с сайта КонсультантПлюс).
- Преобразуйте данные в Power Query, оставив только столбец с датами.
- Загрузите данные в Excel и используйте их в формулах.
FAQ: Частые вопросы о расчёте рабочих дней в Excel
Можно ли посчитать рабочие дни без учёта праздников, но с индивидуальными выходными?
Да, используйте функцию ЧИСТРАБДНИ.МЕЖД без третьего аргумента (праздников). Например, для графика с выходными в четверг и пятницу:
=ЧИСТРАБДНИ.МЕЖД(A2; B2; "0011000")
Здесь строка "0011000" означает, что выходные — четверг (1) и пятница (1).
Как посчитать рабочие часы между датами, а не дни?
Excel не имеет встроенной функции для рабочих часов, но можно комбинировать несколько подходов:
- Посчитайте количество рабочих дней (например,
ЧИСТРАБДНИ). - Умножьте результат на количество рабочих часов в день (например,
=ЧИСТРАБДНИ(A2; B2) * 8для 8-часового дня).
Для точного расчёта с учётом начала и конца рабочего дня (например, с 9:00 до 18:00) потребуется VBA или дополнительные столбцы с временем.
Почему функция возвращает нецелое число дней?
Это происходит, если в ячейках с датами указано не только число, но и время. Например, 01.01.2026 14:30. Чтобы исправить:
- Используйте функцию
ЦЕЛОЕдля округления:=ЦЕЛОЕ(ЧИСТРАБДНИ(A2; B2)). - Или извлеките только дату с помощью
ДЕНЬ,МЕСЯЦ,ГОД:
=ДАТА(ГОД(A2); МЕСЯЦ(A2); ДЕНЬ(A2))
Как учитывать перенос выходных дней?
Функции ЧИСТРАБДНИ и РАБДЕНЬ не знают про перенос выходных по трудовому кодексу. Чтобы это учесть:
- Добавьте перенесённый день в список праздников (если он становится выходным).
- Исключите субботу или воскресенье из списка праздников, если выходной перенесли на другой день.
Пример: если выходной с субботы 6 января перенесли на понедельник 8 января, то в список праздников нужно добавить 08.01.2026, а 06.01.2026 убрать (если она там была).
Можно ли использовать эти функции в Google Sheets?
Да, в Google Таблицах есть аналогичные функции, но с английскими названиями:
=NETWORKDAYS(start_date; end_date; [holidays])— аналогЧИСТРАБДНИ.=WORKDAY(start_date; days; [holidays])— аналогРАБДЕНЬ.=NETWORKDAYS.INTL(start_date; end_date; [weekend]; [holidays])— аналогЧИСТРАБДНИ.МЕЖД.
Синтаксис и логика работы идентичны Excel.