Почему Excel — лучший инструмент для расчёта отработанных дней
Расчёт отработанных дней в месяце — рутинная, но критически важная задача для бухгалтеров, кадровиков и руководителей. Ошибка в табеле может привести к неверному начислению зарплаты, конфликтам с сотрудниками или проверками от трудовой инспекции. Вручную считать дни неэффективно: легко пропустить выходной, забыть про праздники или ошибться в учёте больничных. Здесь на помощь приходит Excel — с его формулами и гибкостью можно автоматизировать процесс, свести ошибки к нулю и сэкономить часы рабочего времени.
В этой статье вы найдёте пошаговые инструкции для разных сценариев: от простого подсчёта рабочих дней между двумя датами до учёта индивидуальных графиков, смен, отпусков и больничных. Мы разберём СЕТДЕНЬ.НЕД, ЧИСТРАБДНИ, ЕСЛИ и другие функции, а также покажем, как создать универсальный шаблон табеля, который будет работать для любого месяца. Неважно, ведёте вы учёт для 5 или 500 сотрудников — после прочтения вы сможете настроить расчёты под свои задачи.
Базовая формула: сколько рабочих дней между двумя датами
Начнём с самого простого — подсчёта количества рабочих дней в заданном периоде, например, с 1 по 31 октября 2026 года. Для этого в Excel есть специальная функция ЧИСТРАБДНИ (англ. NETWORKDAYS). Она автоматически исключает субботы, воскресенья и праздничные дни (если их указать).
Синтаксис функции:
=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])
Пример для октября 2026 года (праздники в России — 4 ноября, но в октябре их нет):
=ЧИСТРАБДНИ("01.10.2026"; "31.10.2026")
Результат: 23 рабочих дня (в октябре 2026 года 31 день, из них 8 выходных).
- 📅 Без праздников: функция учитывает только субботы и воскресенья.
- 🎉 С праздничными днями: добавьте третий аргумент — диапазон ячеек с датами праздников. Например,
=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026"; D2:D10), где вD2:D10перечислены праздники января. - ⚠️ Формат дат: убедитесь, что ячейки с датами отформатированы как Дата (выделите ячейку →
Главная → Формат → Формат ячеек → Дата).
Учёт индивидуальных графиков работы (сменный график, гибкий график)
Если ваши сотрудники работают по нестандартному графику (например, сутки через трое, 2/2, или гибкий график), функция ЧИСТРАБДНИ не подойдёт — она считает только стандартную пятидневку. В таких случаях нужно использовать комбинацию функций ЕСЛИ, И, ДЕНЬНЕД и СУММПРОИЗВ.
Рассмотрим пример для графика 2 через 2 (2 рабочих дня, 2 выходных). Предположим, что первый рабочий день — понедельник (1 октября). Формула для подсчёта рабочих дней в октябре:
=СУММПРОИЗВ(
--(ДЕНЬНЕД(ДАТА(2026; 10; СТРОКА(ДВССЫЛ("1:31")))) <>
{1; 7; 2; 3}); -- 1=воскр, 7=субб, 2=пн, 3=вт (выходные)
--(ДЕНЬНЕД(ДАТА(2026; 10; СТРОКА(ДВССЫЛ("1:31")))) =
{4; 5}) -- 4=ср, 5=чт (рабочие)
)
Эта формула вернёт 16 рабочих дней для графика 2/2 в октябре 2026 года. Для других графиков логику нужно адаптировать.
Как работает формула для сменного графика
Формула использует массив дат от 1 до 31 октября (создаётся через СТРОКА(ДВССЫЛ("1:31"))). Функция ДЕНЬНЕД определяет день недели для каждой даты (1=воскресенье, 2=понедельник и т.д.). Затем СУММПРОИЗВ сравнивает дни недели с шаблоном рабочих/выходных и суммирует совпадения.
⚠️ Внимание: Если график сменяется ежемесячно (например, в ноябре рабочие дни смещаются), формулу нужно корректировать или использовать динамические диапазоны с указанием первого рабочего дня месяца.
Как учесть отпуска, больничные и другие невыходы
В реальной практике сотрудники берут отпуска, болеют или отсутствуют по другим причинам. Чтобы посчитать фактически отработанные дни, нужно из общего количества рабочих дней вычесть дни отсутствия. Для этого:
- Создайте таблицу с датами отсутствия (отпуск, больничный, командировка).
- Используйте функцию
СЧЁТЕСЛИМН(англ.COUNTIFS), чтобы посчитать, сколько из этих дней попало в рабочий период. - Вычтите результат из общего количества рабочих дней.
Пример формулы для сотрудника Иванова, который был в отпуске с 10 по 14 октября и на больничном с 20 по 22 октября:
=ЧИСТРАБДНИ("01.10.2026"; "31.10.2026") -
СЧЁТЕСЛИМН(Отпуска!A:A; ">="&"01.10.2026"; Отпуска!A:A; "<="&"31.10.2026"; Отпуска!B:B; "Иванов") -
СЧЁТЕСЛИМН(Больничные!A:A; ">="&"01.10.2026"; Больничные!A:A; "<="&"31.10.2026"; Больничные!B:B; "Иванов")
Где Отпуска!A:A и Больничные!A:A — столбцы с датами, а B:B — с фамилиями сотрудников.
| Тип отсутствия | Функция для подсчёта | Пример формулы |
|---|---|---|
| Отпуск | СЧЁТЕСЛИМН |
=СЧЁТЕСЛИМН(Отпуска!A:A; ">="&A1; Отпуска!A:A; "<="&B1; Отпуска!B:B; C1) |
| Больничный | СЧЁТЕСЛИМН |
=СЧЁТЕСЛИМН(Больничные!A:A; ">="&A1; Больничные!A:A; "<="&B1; Больничные!B:B; C1) |
| Командировка | СУММЕСЛИМН |
=СУММЕСЛИМН(Командировки!A:A; ">="&A1; Командировки!A:A; "<="&B1; Командировки!B:B; C1; Командировки!C:C; 1) |
Автоматизация табеля рабочего времени: шаблон для любого месяца
Чтобы не настраивать формулы каждый месяц, создайте универсальный шаблон табеля. Он будет:
- 📆 Автоматически определять количество рабочих дней в месяце.
- 📊 Подсчитывать отработанные дни с учётом отпусков и больничных.
- 🔄 Обновляться при смене месяца или года.
Пример структуры шаблона:
| A | B | C | D | E | F |
|-------|-----------|-------|-------|-------|-------|
| ФИО | Дата | Тип | Часы | Дни | Примечание |
| Иванов| 01.10.2026| Работа| 8 | 1 | |
| Иванов| 02.10.2026| Отпуск| 0 | 0 | Ежегодный|
Формулы для автоматического подсчёта:
- В ячейке
H1(количество рабочих дней в месяце):=ЧИСТРАБДНИ(ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(СЕГОДНЯ()); 1); КОНМЕСЯЦА(СЕГОДНЯ(); 0)). - В столбце
E(отработанные дни):=ЕСЛИ(ИЛИ(C2="Отпуск"; C2="Больничный"); 0; 1). - В ячейке
H2(итого отработано):=СУММ(E:E).
☑️ Что должно быть в шаблоне табеля
⚠️ Внимание: Если в вашей организации используются суммированный учёт рабочего времени или скользящие графики, шаблон нужно дополнить столбцами для учёта переработок и нормы часов за период (например, квартал).
Распространённые ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчёте отработанных дней. Вот самые частые из них:
- 🗓 Неправильный формат дат: Excel может воспринимать даты как текст, если ячейки отформатированы неверно. Проверяйте формат через
Формат ячеек → Дата. - 🎭 Путаница с праздничными днями: Функция
ЧИСТРАБДНИне знает про региональные праздники (например, День города). Их нужно добавлять вручную в третий аргумент. - 🔄 Копирование формул с абсолютными ссылками: Если вы копируете формулу с
$A$1по всему столбцу, она не будет обновляться. Используйте относительные ссылки (A1) или смешанные ($A1). - ⏳ Игнорирование високосных годов: При расчёте дней между датами в разных годах (например, 28.02.2023 и 01.03.2026) учитывайте, что 2026 год високосный (29 дней в феврале).
Критическая ошибка: использование функции ДАТАРАЗН для подсчёта рабочих дней. Она возвращает разницу в календарных днях, но не учитывает выходные! Например, =ДАТАРАЗН("01.10.2026"; "07.10.2026"; "d") вернёт 6, хотя рабочих дней всего 5 (6 октября — суббота).
Продвинутые техники: Power Query и VBA для массовой обработки
Если вам нужно обработать данные по сотням сотрудников или за несколько лет, ручной ввод формул станет кошмаром. В таких случаях помогут:
- 🔧 Power Query: инструмент для импорта и преобразования данных. Можно автоматически загружать данные из 1С, табелей в формате CSV или баз данных, очищать их и рассчитывать отработанные дни.
- 🤖 VBA-макросы: скрипты для автоматизации повторяющихся действий. Например, макрос может раз в месяц обновлять табель, подтягивая данные из других файлов.
- 📈 Сводные таблицы: для анализа отработанных дней по отделам, проектам или периодам.
Пример кода на VBA для подсчёта отработанных дней в выбранном диапазоне:
Sub CountWorkDays()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim startDate As Date, endDate As Date
Dim workDays As Integer
Set ws = ActiveSheet
Set rng = Selection
For Each cell In rng
startDate = ws.Cells(cell.Row, 1).Value ' Предполагаем, что дата начала в столбце A
endDate = ws.Cells(cell.Row, 2).Value ' Дата конца в столбце B
workDays = Application.WorksheetFunction.NetWorkdays(startDate, endDate)
ws.Cells(cell.Row, 3).Value = workDays ' Результат в столбце C
Next cell
End Sub
Этот макрос берёт даты из столбцов A и B, считает рабочие дни и записывает результат в столбец C. Чтобы его запустить, нажмите Alt + F11, вставьте код в модуль и нажмите F5.
FAQ: Ответы на частые вопросы
Как посчитать отработанные дни, если сотрудник работает по сменному графику 3/3?
Для графика 3 через 3 (3 рабочих дня, 3 выходных) используйте формулу с СУММПРОИЗВ и ДЕНЬНЕД, адаптировав логику под ваш первый рабочий день. Пример:
=СУММПРОИЗВ(
--(ДЕНЬНЕД(ДАТА(2026; 10; СТРОКА(ДВССЫЛ("1:31")))) <>
{1; 7; 2; 3; 4}); -- 1=вс, 7=сб, 2=пн, 3=вт, 4=ср (выходные)
--(ДЕНЬНЕД(ДАТА(2026; 10; СТРОКА(ДВССЫЛ("1:31")))) =
{5; 6; 1}) -- 5=чт, 6=пт, 1=вс (рабочие)
)
Здесь рабочие дни — четверг, пятница и воскресенье (если первый день цикла — четверг).
Можно ли в Excel автоматически учитывать праздничные дни из производственного календаря?
Да, но для этого нужно:
- Скачать производственный календарь в формате Excel.
- Скопировать столбец с праздничными датами в отдельный лист вашего файла.
- В формуле
ЧИСТРАБДНИссылаться на этот диапазон:=ЧИСТРАБДНИ(A1; B1; Праздники!A:A).
Обновляйте список праздников каждый год!
Как посчитать отработанные часы, если день считается отработанным от 4 часов?
Используйте функцию ЕСЛИ с условием:
=ЕСЛИ(D2>=4; 1; 0)
Где D2 — ячейка с количеством отработанных часов. Если нужно посчитать часы, а не дни, используйте просто =D2.
Почему функция ЧИСТРАБДНИ возвращает ошибку #ИМЯ?
Ошибка #ИМЯ! появляется, если:
- Вы используете английскую версию Excel, а пишете функцию на русском (напишите
NETWORKDAYSвместоЧИСТРАБДНИ). - В ячейках с датами текст, а не даты (проверьте формат ячеек).
- Вы пропустили точку с запятой между аргументами.
Как посчитать отработанные дни за квартал или год?
Для квартала:
=ЧИСТРАБДНИ(ДАТА(2026; 1; 1); КОНМЕСЯЦА(ДАТА(2026; 3; 1); 0))
Для года:
=ЧИСТРАБДНИ(ДАТА(2026; 1; 1); ДАТА(2026; 12; 31))
Не забудьте добавить праздничные дни в третий аргумент!