Расчет количества рабочих дней в Excel
Чтобы быстро узнать количество рабочих дней между двумя датами в Excel, используйте функцию =NETWORKDAYS(начальная_дата; конечная_дата). Она автоматически исключает субботы и воскресенья. Если нужно учесть государственные праздники или нестандартный график работы (например, плавающие выходные), добавьте третий аргумент со списком праздников или используйте расширенную функцию NETWORKDAYS.INTL. Это позволяет получить точный результат за секунды без ручного пересчета календаря.
Базовый расчет: функция NETWORKDAYS
Стандартная функция подходит для большинства офисных задач, где рабочая неделя длится с понедельника по пятницу. Она считает все дни в диапазоне, вычитая выходные (субботу и воскресенье).
Синтаксис:
=NETWORKDAYS(нач_дата; кон_дата; [праздники])
- нач_дата, кон_дата — ячейки с датами начала и конца периода.
- [праздники] — необязательный диапазон ячеек, содержащий даты праздников, которые также не считаются рабочими.
Функция включает в расчет и начальную, и конечную дату. Если вам нужно исключить один из краев периода, скорректируйте формулу вручную (например, вычтите 1).
Пример использования:
Допустим, в ячейке A2 стоит дата начала проекта (01.04.2026), а в B2 — дата сдачи (30.04.2026).
Формула =NETWORKDAYS(A2; B2) вернет количество будних дней в апреле, игнорируя все субботы и воскресенья.
Учет государственных праздников
Базовая формула не знает о государственных праздниках (Новый год, 8 Марта, майские праздники и т.д.). Чтобы результат был точным, необходимо создать список нерабочих праздничных дней.
- Создайте отдельный столбец или лист со списком дат праздников (например, диапазон
D2:D10). - Вставьте этот диапазон третьим аргументом в формулу.
- Используйте абсолютные ссылки (знак
$), чтобы диапазон не «съехал» при копировании формулы.
Формула с праздниками:
=NETWORKDAYS(A2; B2; $D$2:$D$10)
Если в периоде между датами попадает праздник из списка, функция автоматически уменьшит итоговое число рабочих дней на единицу.
Убедитесь, что даты в списке праздников имеют формат «Дата», а не «Текст». Иначе функция проигнорирует их и не вычтет из общего количества.
Нестандартный график: функция NETWORKDAYS.INTL
В некоторых организациях выходные дни отличаются от стандартных (суббота и воскресенье), либо используется скользящий график. Для таких случаев предназначена функция NETWORKDAYS.INTL. Она позволяет задать любой паттерн выходных дней.
Синтаксис:
=NETWORKDAYS.INTL(нач_дата; кон_дата; [код_выходных]; [праздники])
Аргумент [код_выходных] может быть числом от 1 до 17 или строкой из семи нулей и единиц.
| Код | Строка | Выходные дни | Применение |
|---|---|---|---|
| 1 | "0000011" | Сб, Вс | Стандартный график (по умолчанию) |
| 2 | "1000001" | Вс, Пн | Ближний Восток, некоторые смены |
| 11 | "1100000" | Пт, Сб | Страны с выходным в пятницу |
| 17 | "0000001" | Только Вс | Работа без выходных, кроме воскресенья |
В строке кода «1» означает выходной, «0» — рабочий день. Отсчет начинается с понедельника. Например, код "1010000" сделает выходными понедельник и среду.
Пример для шестидневной рабочей недели:
Если в вашей компании выходной только воскресенье, используйте:
=NETWORKDAYS.INTL(A2; B2; 17; $D$2:$D$10)
Динамический расчет от текущей даты
Часто требуется узнать, сколько рабочих дней осталось до дедлайна «здесь и сейчас». Для этого комбинируйте функцию подсчета дней с функцией СЕГОДНЯ() (или TODAY() в англ. версии).
- Осталось дней до даты в ячейке B2:
=NETWORKDAYS(СЕГОДНЯ(); B2) - Рабочих дней до конца текущего месяца:
=NETWORKDAYS(СЕГОДНЯ(); КОНМЕСЯЦА(СЕГОДНЯ(); 0))
Эти формулы обновляются автоматически при каждом открытии файла, всегда показывая актуальное количество дней с учетом сегодняшней даты.
Частые ошибки и решения
При работе с датами в Excel пользователи часто сталкиваются с типовыми проблемами. Вот как их исправить:
- Ошибка #ЗНАЧ! (#VALUE!): Возникает, если одна из ячеек содержит текст вместо даты или дата записана в неверном формате.
- Решение: Выделите ячейки, нажмите
Ctrl+1, выберите формат «Дата». Если дата введена текстом, используйте функциюДАТАЗНАЧ().
- Решение: Выделите ячейки, нажмите
- Отрицательное число: Появляется, если дата начала позже даты окончания.
- Решение: Проверьте порядок ячеек или оберните формулу в
=ABS(...), чтобы получить модуль числа.
- Решение: Проверьте порядок ячеек или оберните формулу в
- Праздники не учитываются: Чаще всего причина в относительных ссылках. При протягивании формулы вниз диапазон праздников смещается.
- Решение: Закрепите диапазон знаком доллара:
$D$2:$D$10.
- Решение: Закрепите диапазон знаком доллара:
- Лишние дни: В списке праздников есть дубликаты или даты, не являющиеся праздниками.
- Решение: Проверьте список праздников на уникальность и соответствие календарю.
FAQ
Можно ли посчитать только рабочие часы?
Функции NETWORKDAYS считают полные дни. Для расчета часов умножьте результат на количество рабочих часов в дне (например, =NETWORKDAYS(A2;B2)*8). Для более точного учета времени начала и конца рабочего дня используйте функцию ЧИСТРАБДНИ.ИНТЛ в связке с временными значениями или специализированные надстройки.
Работает ли это в старых версиях Excel?
Функция NETWORKDAYS доступна начиная с Excel 2007. Функция NETWORKDAYS.INTL появилась в Excel 2010. В версиях старше 2007 года придется использовать сложные комбинации функций или макросы VBA.
Как исключить конкретную дату, не создавая список праздников? Если нужно вычесть всего один конкретный день, можно просто вычесть 1 из результата формулы, если вы уверены, что этот день является рабочим по стандартному графику. Однако надежнее добавить эту дату в небольшой диапазон и указать его как список праздников.