Как посчитать рабочие дни между двумя датами в Excel: от простых формул до сложных графиков

Подсчёт рабочих дней в Microsoft Excel — задача, с которой сталкивается каждый второй офисный сотрудник. Нужно ли рассчитать сроки проекта, оплату по тарифу «за рабочий день» или просто спланировать дедлайны с учётом выходных? Без точного инструмента здесь не обойтись. К счастью, Excel предлагает сразу несколько способов решить эту задачу — от элементарных функций до гибких пользовательских решений для нестандартных графиков.

Многие ошибочно думают, что достаточно вычесть одну дату из другой и отнять количество выходных «на глаз». Но такой подход даёт погрешность до 20% — особенно если в расчётном периоде попадают государственные праздники или переносы. В этой статье разберём 5 надёжных методов, включая скрытые возможности Excel, о которых не пишут в стандартных руководствах.

Вы узнаете:

  • 🔹 Как использовать функцию ЧИСТРАБДНИ для базового расчёта (даже если вы новичок)
  • 🔹 Почему РАБДЕНЬ лучше подходит для планирования будущих дат, а не для ретроспективного анализа
  • 🔹 Как учитывать региональные праздники и переносы выходных (спойлер: потребуется Power Query)
  • 🔹 Что делать, если ваша компания работает по графику «2 через 2» или «сутки через трое»
📊 Как часто вам нужно считать рабочие дни в Excel?
Ежедневно
Несколько раз в неделю
Редко, по необходимости
Никогда не пользовался такими функциями

1. Базовый метод: функция ЧИСТРАБДНИ для стандартного графика

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

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

Аргумент [праздники] не обязателен, но если его не указать, Excel проигнорирует все официальные нерабочие дни (например, 1 мая или 9 мая в России). Это критично для точных расчётов!

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

=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026"; {"01.01.2026";"02.01.2026";"03.01.2026";"04.01.2026";"05.01.2026";"06.01.2026";"07.01.2026";"08.01.2026"})
⚠️ Внимание: Если вы укажете праздники в формате текста (например, "01.01.2026" вместо даты), Excel вернёт ошибку #ЗНАЧ!. Всегда используйте реальные даты или ссылки на ячейки с датами.

Результат для этого примера — 17 рабочих дней (в январе 2026 года при стандартном графике). Если забыть про праздники, Excel покажет 21 день — ошибка в 4 дня!

Формат ячеек с датами — должен быть "Дата", а не "Текст" или "Общий"

Праздники указаны как диапазон ячеек или массив дат, а не текст

Начальная дата меньше или равна конечной (иначе результат будет отрицательным)

Учёт региональных праздников (например, 12 июня в России не является выходным на федеральном уровне)

-->

2. Функция РАБДЕНЬ: когда нужно узнать не «сколько», а «какой»

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

Синтаксис:

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

Пример: допустим, сегодня 15 мая 2026, и вам нужно узнать, на какую дату придётся 10-й рабочий день от сегодня. Формула:

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

Результат — 29 мая 2026 (учитывая, что 18–19 мая — выходные, а 9 мая был праздничным днём, но в мае 2026 он уже прошёл). Если добавить праздники (например, 12 июня), формула автоматически их пропустит.

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

3. Учёт региональных праздников и переносов выходных

Стандартные функции Excel не знают о региональных особенностях. Например, в Москве 12 июня — рабочий день, а в Татарстане это праздник Сабантуй. Как быть? Есть три варианта:

  1. Ручной ввод праздников. Создайте отдельный лист с перечнем нерабочих дней и ссылайтесь на него в формулах. Минус: придётся обновлять вручную каждый год.
  2. Power Query + внешние данные. Подключитесь к API календаря праздников (например, Nager.Date) и автоматически загружайте актуальные данные.
  3. Надстройка «Праздники РФ». Бесплатные решения для Excel (например, от PlanFix) добавляют встроенный календарь российских праздников с учётом переносов.

Пример настройки через Power Query:

  1. Перейдите на вкладку Данные → Получить данные → Из других источников → Из веб.
  2. Введите URL API (например, https://date.nager.at/api/v3/PublicHolidays/2026/RU).
  3. Преобразуйте данные в таблицу и загрузите в Excel.
  4. Используйте столбец с датами праздников в формуле ЧИСТРАБДНИ.
⚠️ Внимание: При импорте праздников через API проверьте, чтобы даты были в правильном формате. Иногда API возвращает строки вроде "2026-01-01" — их нужно преобразовать в даты Excel с помощью =ДАТАЗНАЧ().
Регион Дополнительные праздники (2026 год) Переносы выходных
Москва 12 июня (День России) — рабочий 4 ноября (понедельник) — выходной перенесён с 5 января
Татарстан 25 июня (Сабантуй), 6 мая (День защиты детей) Переносов нет
Крым 18 марта (День воссоединения) 20 мая (понедельник) — выходной перенесён с 9 мая

4. Нестандартные графики работы: сменный режим, сутки через трое

Что делать, если ваша компания работает по графику «2 через 2» или «сутки через трое»? Стандартные функции здесь бессильны — потребуется комбинация из:

  • 📅 Вспомогательных столбцов с указанием смен для каждой даты
  • 🔄 Функции ЕСЛИ + И для проверки рабочих дней
  • 📊 Power Query или VBA для автоматизации (если период расчёта больше месяца)

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

  1. Создайте столбец с датами от начальной до конечной (функция =ПОСЛЕД()).
  2. Добавьте столбец «День недели» с формулой =ДЕНЬНЕД(дата; 2) (где 2 — понедельник=1, воскресенье=7).
  3. В третьем столбце используйте формулу:
    =ЕСЛИ(И(MOD(СТРОКА()-1;4)<2; [@[День недели]]<>6; [@[День недели]]<>7); "Рабочий"; "Выходной")

    Здесь MOD(СТРОКА()-1;4) обеспечивает чередование 2 рабочих/2 выходных.

  4. Подсчитайте количество ячеек с текстом «Рабочий» функцией =СЧЁТЕСЛИ().

Для графика «сутки через трое» логика аналогична, но шаг чередования меняется на 4 дня. Главное — не забывать про перекрытие смен (например, если смена начинается в 20:00 1 мая и заканчивается в 20:00 2 мая, оба дня могут считаться рабочими).

Как учитывать ночные смены?

Если рабочий день начинается в одном календарном дне, а заканчивается в другом (например, с 22:00 до 6:00), создайте дополнительный столбец с временем начала смены. Затем используйте формулу вида:

=ЕСЛИ(ИЛИ(

И([@Дата]=D2; [@Время]>=ВРЕМЯ(22;0;0));

И([@Дата]=D2+1; [@Время]<ВРЕМЯ(6;0;0))

); "Рабочий"; "Выходной")

где D2 — ячейка с датой начала смены, а [@Время] — столбец со временем события.

5. Динамические расчёты: как автоматизировать обновление праздников

Ручной ввод праздников каждый год — рутина. Автоматизируем процесс:

Способ 1. Power Query + параметры. Создайте запрос, который загружает праздники из интернета или корпоративного календаря, а затем свяжите его с вашей таблицей. Обновление данных будет происходить при открытии файла или по кнопке.

Способ 2. VBA-макрос. Напишите скрипт, который парсит официальный производственный календарь (например, с сайта КонсультантПлюс) и заполняет лист «Праздники». Пример кода:

Sub UpdateHolidays()

Dim ws As Worksheet

Set ws = ThisWorkbook.Sheets("Праздники")

' Здесь код для парсинга или импорта данных

ws.Range("A1").CurrentRegion.ClearContents

' ... (логика заполнения)

MsgBox "Праздники обновлены!", vbInformation

End Sub

Способ 3. Office Scripts (Excel Online). Если вы работаете в веб-версии Excel, используйте Office Scripts для автоматического обновления данных по расписанию.

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

Год Дата Название праздника Тип (федеральный/региональный)
2026 01.01.2026 Новый год Федеральный
2026 07.01.2026 Рождество Христово Федеральный
2026 23.02.2026 День защитника Отечества Федеральный

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

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

  • 🗓 Неверный формат дат. Если ячейка отформатирована как текст, Excel воспринимает "01.01.2026" как строку, а не дату. Исправляйте формат через Формат ячеек → Дата.
  • 🔄 Перепутанные начальная и конечная даты. Если ЧИСТРАБДНИ("31.01.2026"; "01.01.2026"), результат будет отрицательным. Используйте =АБС() для защиты от ошибок.
  • 🎉 Пропущенные праздники. Забыли указать 8 марта или 1 мая? Excel посчитает их как рабочие дни. Всегда проверяйте актуальность списка праздников.
  • Игнорирование временных зон. Если даты приходят из разных источников (например, UTC и московское время), может возникнуть расхождение в 1 день.

Чтобы минимизировать ошибки, используйте проверку данных:

  1. Выделите ячейки с датами.
  2. Перейдите на вкладку Данные → Проверка данных.
  3. Установите критерий «Дата» и диапазон (например, от 01.01.2020 до 31.12.2030).
⚠️ Внимание: Если вы работаете с датами до 1900 года, Excel может их неправильно интерпретировать. Дело в том, что в Excel даты хранятся как числа (где 1 = 01.01.1900), и для исторических расчётов потребуются специальные функции.

7. Альтернативные инструменты: когда Excel не подходит

Excel — не всегда оптимальное решение для расчёта рабочих дней. Рассмотрите альтернативы:

  • 📊 Google Sheets. Функции NETWORKDAYS и WORKDAY работают аналогично, но есть встроенная интеграция с Google Calendar для автоматического импорта праздников.
  • 💻 Python (библиотека pandas). Для больших массивов данных (например, расчёт рабочих дней за 10 лет для 1000 сотрудников) Python справится быстрее. Пример кода:
    import pandas as pd
    

    from pandas.tseries.holiday import USFederalHolidayCalendar

    cal = USFederalHolidayCalendar()

    holidays = cal.holidays(start='2026-01-01', end='2026-12-31')

    business_days = pd.bdate_range('2026-01-01', '2026-01-31', freq='C', holidays=holidays)

    print(len(business_days)) # Количество рабочих дней

  • 📱 Мобильные приложения. Для быстрых расчётов подойдут Days Until (iOS) или Business Days Calculator (Android). Они учитывают локальные праздники и переносы.

Excel остаётся лидером для офисных задач, но если вам нужна автоматизация на уровне предприятия (например, для расчёта зарплаты 10 000 сотрудников), стоит рассмотреть специализированные системы вроде 1C, SAP или Bitrix24.

=ARRAYFORMULA(SUM(--(WEEKDAY(ROW(INDIRECT(A1&":"&B1)))<>1)*(WEEKDAY(ROW(INDIRECT(A1&":"&B1)))<>7)))

где A1 — начальная дата, B1 — конечная. Для учёта праздников добавьте условие *--(ROW(INDIRECT(A1&":"&B1))<>Holidays), где Holidays — диапазон с датами праздников.-->

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

Можно ли в Excel посчитать рабочие дни с учётом полурабочих дней (например, предпраздничные)?

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

  1. Разбейте такой день на 0.5 в расчётах (например, если 22 февраля — короткий день, считайте его как 0.5 рабочего дня).
  2. Используйте VBA для создания кастомной функции, которая будет присваивать вес каждому дню.

Пример формулы для полурабочего дня:

=ЧИСТРАБДНИ(A1; B1) + СЧЁТЕСЛИ(ПолурабочиеДни; ">0") * 0.5

где ПолурабочиеДни — диапазон с датами, имеющими вес 0.5.

Как посчитать рабочие дни между датами в Excel Online?

В веб-версии Excel доступны те же функции: ЧИСТРАБДНИ и РАБДЕНЬ. Особенности:

  • Для импорта праздников используйте Данные → Из таблицы/диапазона (если данные хранятся в той же книге).
  • Power Query работает ограниченно — некоторые источники данных могут быть недоступны.
  • Нет поддержки VBA, но можно использовать Office Scripts (аналог макросов для Excel Online).
Почему функция ЧИСТРАБДНИ возвращает ошибку #ИМЯ?

Ошибка #ИМЯ! возникает в трёх случаях:

  1. Опечатка в названии функции (например, ЧИСЛОРАБДНЕЙ вместо ЧИСТРАБДНИ).
  2. Отсутствует надстройка Пакет анализа (актуально для старых версий Excel). Установите её через Файл → Параметры → Надстройки.
  3. Язык интерфейса Excel отличается от языка формул (например, русский интерфейс, но формулы на английском). Проверьте настройки языка в Файл → Параметры → Язык.

Решение: используйте английские названия функций (NETWORKDAYS, WORKDAY) — они работают в любой локализации.

Как посчитать рабочие часы между двумя датами (а не дни)?

Для расчёта рабочих часов используйте комбинацию функций:

  1. Сначала посчитайте количество полных рабочих дней (ЧИСТРАБДНИ).
  2. Умножьте на количество рабочих часов в день (например, 8).
  3. Добавьте часы за неполные рабочие дни (начальный и конечный). Для этого используйте:
=(

(ЧИСТРАБДНИ(A1; B1) - 1) * 8 +

ЕСЛИ(ДЕНЬНЕД(A1; 2) < 6; МАКС(0; МИН(ВРЕМЯ(18;0;0); B1 - A1) - ВРЕМЯ(9;0;0)); 0) +

ЕСЛИ(ДЕНЬНЕД(B1; 2) < 6; МАКС(0; ВРЕМЯ(18;0;0) - МАКС(ВРЕМЯ(9;0;0); B1 - НАЧНЕД(B1))); 0)

)

где A1 — дата/время начала, B1 — дата/время конца, а ВРЕМЯ(9;0;0) и ВРЕМЯ(18;0;0) — начало и конец рабочего дня.

Можно ли в Excel учесть индивидуальный график отпусков сотрудников?

Да, но потребуется дополнительная таблица с данными об отпусках. Алгоритм:

  1. Создайте таблицу с датами отпусков для каждого сотрудника.
  2. Используйте функцию СЧЁТЕСЛИМН, чтобы исключить дни отпуска из расчёта:
    =ЧИСТРАБДНИ(A1; B1) - СЧЁТЕСЛИМН(Отпуска!A:A; ">="&A1; Отпуска!A:A; "<="&B1; Отпуска!B:B; C1)

    где Отпуска!A:A — даты отпусков, Отпуска!B:B — имена сотрудников, C1 — имя текущего сотрудника.

Для больших команд удобнее использовать Power Pivot или внешние системы учёта рабочего времени.