Почему расчёт рабочих дней в Excel — это не просто арифметика
Вы когда-нибудь пробовали вручную посчитать, сколько рабочих дней осталось до дедлайна проекта, исключая выходные и праздники? Если да, то знаете: это утомительно и чревато ошибками. В Microsoft Excel есть встроенные инструменты, которые автоматизируют этот процесс — но большинство пользователей либо не знают о них, либо используют их неэффективно.
Проблема в том, что простая разница между двумя датами (=B2-A2) учитывает все календарные дни, включая субботы, воскресенья и официальные праздники. А для бизнес-задач — от планирования поставок до расчёта зарплаты — нужны именно рабочие дни. В этой статье разберём 5 проверенных способов, как в Excel вывести рабочие дни с учётом выходных, праздников и даже индивидуальных графиков.
Спойлер: вам не придётся писать сложные макросы или изучать VBA. Все решения основаны на стандартных функциях, которые работают в Excel 2010–2023 и Excel Online. А если вы работаете с Google Таблицами — большинство методов подойдёт и там (с небольшими поправками).
Способ 1: Функция РАБДЕНЬ — базовый расчёт без праздников
Функция =РАБДЕНЬ() (англ. WORKDAY) — самый простой инструмент для подсчёта рабочих дней между двумя датами. Она автоматически исключает субботы и воскресенья, но не учитывает государственные праздники. Синтаксис:
=РАБДЕНЬ(нач_дата; кол_дней; [праздники])
Где:
- 📅 нач_дата — начальная дата (например,
=РАБДЕНЬ("10.05.2026"; 10)вернёт дату через 10 рабочих дней). - 🔢 кол_дней — количество рабочих дней, которое нужно прибавить (или вычесть, если указать отрицательное значение).
- 🎉 [праздники] — необязательный аргумент (диапазон ячеек с датами праздников).
Пример: если сегодня 10 мая 2026 (пятница), то формула =РАБДЕНЬ("10.05.2026"; 5) вернёт 17.05.2026 (пятницу следующей недели), пропустив субботу и воскресенье.
| Формула | Результат (при нач_дата = 10.05.2026) | Пояснение |
|---|---|---|
=РАБДЕНЬ("10.05.2026"; 1) |
13.05.2026 | Следующий рабочий день (понедельник). |
=РАБДЕНЬ("10.05.2026"; -1) |
09.05.2026 | Предыдущий рабочий день (четверг). |
=РАБДЕНЬ("10.05.2026"; 5; {"01.05.2026"}) |
17.05.2026 | Учитывает 1 мая как праздник (хотя в примере он уже прошёл). |
⚠️ Внимание: Если вы укажете в аргументе [праздники] дату, которая выпадает на выходной, Excel проигнорирует её — праздники учитываются только если приходятся на будни.
Способ 2: ЧИСТРАБДНИ — подсчёт рабочих дней между датами
Функция =ЧИСТРАБДНИ() (англ. NETWORKDAYS) решает обратную задачу: она не сдвигает дату, а считает количество рабочих дней в заданном промежутке. Синтаксис идентичен РАБДЕНЬ:
=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])
Пример: формула =ЧИСТРАБДНИ("01.05.2026"; "31.05.2026") вернёт 23 — столько рабочих дней в мае 2026 года (без учёта праздников). Если добавить праздники:
=ЧИСТРАБДНИ("01.05.2026"; "31.05.2026"; {"01.05.2026"; "09.05.2026"})
Результат будет 21 (минус 1 и 9 мая).
Убедиться, что даты введены как даты (не как текст)|Проверить формат ячеек (должен быть "Дата")|Указать праздники в отдельном диапазоне (если нужны)|Исключить дубликаты в списке праздников-->
Эту функцию удобно использовать для:
- 📊 Расчёта отработанных дней в табеле учёта рабочего времени.
- 📅 Планирования сроков выполнения задач в проектах.
- 💰 Подсчёта дней для начисления зарплаты или больничных.
⚠️ Внимание: Есликон_датараньшенач_дата, функция вернёт отрицательное значение. Чтобы избежать ошибок, используйте=АБС(ЧИСТРАБДНИ(...)).
Способ 3: Учёт индивидуальных выходных (не только суббота-воскресенье)
Что делать, если ваша компания работает по графику 2/2 (два дня через два) или у вас нестандартные выходные? Например, в некоторых странах выходными являются пятница и суббота. Для таких случаев в Excel 2010 и новее есть функция =РАБДЕНЬ.МЕЖД (англ. WORKDAY.INTL).
Её синтаксис:
=РАБДЕНЬ.МЕЖД(нач_дата; кол_дней; [выходные]; [праздники])
Ключевое отличие — аргумент [выходные], который задаёт какие дни недели считать выходными. Он может быть:
- 🔢 Числом (например,
1— суббота-воскресенье,11— воскресенье-понедельник). - 📝 Строкой из 7 символов (например,
"0000011", где1— выходной,0— рабочий день).
Примеры:
| Формула | Выходные дни | Результат (при нач_дата = 10.05.2026) |
|---|---|---|
=РАБДЕНЬ.МЕЖД("10.05.2026"; 5; 1) |
Сб-Вс (стандарт) | 17.05.2026 |
=РАБДЕНЬ.МЕЖД("10.05.2026"; 5; 11) |
Вс-Пн | 18.05.2026 |
=РАБДЕНЬ.МЕЖД("10.05.2026"; 5; "0000011") |
Сб-Вс (задано строкой) | 17.05.2026 |
=РАБДЕНЬ.МЕЖД("10.05.2026"; 5; "0101010") |
Пн, Ср, Пт | 22.05.2026 |
Важно: если вы используете строковый формат для аргумента [выходные], порядок дней всегда начинается с понедельника. Например, строка "0000011" означает, что выходные — суббота (6-й символ) и воскресенье (7-й символ).
Стандартный (пн-пт)|Сменный (например, 2/2)|Неполная неделя (например, пн-чт)|Другой-->
Способ 4: Динамический список праздников из интернета
Если вам нужно учитывать государственные праздники, которые меняются каждый год (например, Пасха или переносимые выходные), вручную вводить их неудобно. Решение — автоматически импортировать праздники из внешних источников.
Вот пошаговая инструкция для Excel 365 и Excel 2021:
- Перейдите на вкладку
Данные→Получить данные→Из других источников→Из интернета. - Вставьте URL с данными о праздниках (например, isdayoff.ru предоставляет API для России).
- Преобразуйте данные в таблицу и свяжите их с функцией
ЧИСТРАБДНИчерез именованный диапазон.
Пример формулы с динамическим списком:
=ЧИСТРАБДНИ(A2; B2; Праздники!A:A)
Где Праздники!A:A — столбец с датами праздников, импортированными из интернета.
Как обновить данные о праздниках
Чтобы актуализировать список праздников, нажмите правой кнопкой на таблицу с данными и выберите Обновить. В Excel Online обновление происходит автоматически при открытии файла.
⚠️ Внимание: При импорте данных из интернета Excel может запросить разрешение на подключение к внешнему источнику. Убедитесь, что источник надёжен, чтобы избежать утечек данных.
Способ 5: Пользовательская функция на VBA для сложных графиков
Если стандартные функции не покрывают ваши нужды (например, у вас скользящий график выходных или разные праздники для разных регионов), можно написать собственную функцию на VBA. Вот пример кода для подсчёта рабочих дней с учётом индивидуальных правил:
Function CustomWorkdays(start_date As Date, end_date As Date, Optional holidays As Range) As Long
Dim day_count As Long, current_date As Date
current_date = start_date
day_count = 0
Do While current_date <= end_date
' Проверяем, что день не выходной (например, сб или вс)
If Weekday(current_date, vbMonday) < 6 Then
' Проверяем, что день не праздник
If Not holidays Is Nothing Then
If WorksheetFunction.CountIf(holidays, current_date) = 0 Then
day_count = day_count + 1
End If
Else
day_count = day_count + 1
End If
End If
current_date = current_date + 1
Loop
CustomWorkdays = day_count
End Function
Чтобы использовать эту функцию:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert→Module). - Сохраните файл как
.xlsm(с поддержкой макросов). - Теперь в ячейке можно использовать
=CustomWorkdays(A2; B2; Праздники!A:A).
Преимущества этого метода:
- 🔧 Гибкость: можно задать любые правила для выходных (например, "каждый третий понедельник месяца").
- 🌍 Мультирегиональность: поддерживает разные праздники для разных филиалов.
- 📈 Производительность: работает быстрее, чем сложные формулы с множеством условий.
Типичные ошибки и как их избежать
Даже опытные пользователи Excel иногда допускают ошибки при работе с рабочими днями. Вот самые распространённые:
- Формат ячеек не "Дата".
Если Excel воспринимает вашу дату как текст, функцииРАБДЕНЬиЧИСТРАБДНИвернут ошибку#ЗНАЧ!. Чтобы исправить:- Выделите ячейку → правая кнопка →
Формат ячеек→ выберитеДата. - Используйте функцию
=ДАТАЗНАЧ()для преобразования текста в дату.
- Выделите ячейку → правая кнопка →
Если в диапазоне
[праздники] даты записаны как "01.05.2026" (текст), а не как даты, они не будут учтены. Проверьте формат столбца с праздниками.В некоторых локализациях Excel функции
РАБДЕНЬ и ЧИСТРАБДНИ могут называться по-другому (например, на немецком — ARBEITSTAG). Убедитесь, что у вас английская или русская версия.Ещё одна частая проблема — переносимые выходные. Например, если суббота объявлена рабочим днём, а понедельник — выходным, стандартные функции не учтут это автоматически. Решение:
- 📅 Добавьте перенесённый выходной в список праздников.
- 🔄 Используйте
РАБДЕНЬ.МЕЖДс кастомными выходными (например,"0100001"для выходного в понедельник).
FAQ: Ответы на частые вопросы
Как в Excel посчитать рабочие дни между двумя датами, исключая праздники?
Используйте функцию =ЧИСТРАБДНИ(нач_дата; кон_дата; праздники). Например:
=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026"; {"01.01.2026"; "07.01.2026"})
Эта формула вернёт количество рабочих дней в январе 2026 года за вычетом 1 и 7 января.
Можно ли в Excel учитывать региональные праздники (например, для разных стран)?
Да, для этого:
- Создайте отдельные списки праздников для каждого региона на разных листах.
- В функции
ЧИСТРАБДНИилиРАБДЕНЬссылайтесь на нужный диапазон. Например:
=ЧИСТРАБДНИ(A2; B2; Если(C2="Россия"; Россия!A:A; Беларусь!A:A))
Где C2 — ячейка с названием региона.
Как в Google Таблицах посчитать рабочие дни?
В Google Sheets используются те же функции, но на английском:
=WORKDAY()— аналогРАБДЕНЬ.=NETWORKDAYS()— аналогЧИСТРАБДНИ.=WORKDAY.INTL()— аналогРАБДЕНЬ.МЕЖД.
Пример:
=NETWORKDAYS("5/1/2026"; "5/31/2026"; {"5/1/2026"; "5/9/2026"})
Почему функция РАБДЕНЬ возвращает ошибку #ИМЯ?
Ошибка #ИМЯ! означает, что Excel не распознаёт имя функции. Возможные причины:
- Опечатка в названии (проверьте регистр:
РАБДЕНЬ, а нерабдень). - Используется нерусская версия Excel (попробуйте
WORKDAY). - Отсутствует надстройка
Пакет анализа(в старых версиях Excel некоторые функции требуют её активации).
Решение: переключитесь на английскую раскладку и попробуйте =WORKDAY().
Как посчитать рабочие часы (а не дни) в Excel?
Для подсчёта рабочих часов между двумя датами:
- Вычислите количество рабочих дней (например, с помощью
ЧИСТРАБДНИ). - Умножьте на количество рабочих часов в день. Например:
=ЧИСТРАБДНИ(A2; B2) * 8
Где 8 — стандартная продолжительность рабочего дня в часах.
Для более точного расчёта (с учётом времени начала/окончания рабочего дня) используйте:
=ЕСЛИ(И(ЧАС(A2)>=9; ЧАС(A2)<18); ЧИСТРАБДНИ(A2; B2) 8; ЧИСТРАБДНИ(A2; B2) 8 - (ЕСЛИ(ЧАС(A2)<9; 9-ЧАС(A2); 0) + ЕСЛИ(ЧАС(B2)>=18; ЧАС(B2)-18; 0)))