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

Почему 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=понедельник и т.д.). Затем СУММПРОИЗВ сравнивает дни недели с шаблоном рабочих/выходных и суммирует совпадения.

⚠️ Внимание: Если график сменяется ежемесячно (например, в ноябре рабочие дни смещаются), формулу нужно корректировать или использовать динамические диапазоны с указанием первого рабочего дня месяца.

Как учесть отпуска, больничные и другие невыходы

В реальной практике сотрудники берут отпуска, болеют или отсутствуют по другим причинам. Чтобы посчитать фактически отработанные дни, нужно из общего количества рабочих дней вычесть дни отсутствия. Для этого:

  1. Создайте таблицу с датами отсутствия (отпуск, больничный, командировка).
  2. Используйте функцию СЧЁТЕСЛИМН (англ. COUNTIFS), чтобы посчитать, сколько из этих дней попало в рабочий период.
  3. Вычтите результат из общего количества рабочих дней.

Пример формулы для сотрудника Иванова, который был в отпуске с 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)
📊 Как вы обычно учитываете отсутствия сотрудников?
Вручную в табеле
Через Excel с формулами
Специализированное ПО (1С, ЗУП)
Не учитываю, веду упрощённый учёт

Автоматизация табеля рабочего времени: шаблон для любого месяца

Чтобы не настраивать формулы каждый месяц, создайте универсальный шаблон табеля. Он будет:

  • 📆 Автоматически определять количество рабочих дней в месяце.
  • 📊 Подсчитывать отработанные дни с учётом отпусков и больничных.
  • 🔄 Обновляться при смене месяца или года.

Пример структуры шаблона:

| A | B | C | D | E | F |

|-------|-----------|-------|-------|-------|-------|

| ФИО | Дата | Тип | Часы | Дни | Примечание |

| Иванов| 01.10.2026| Работа| 8 | 1 | |

| Иванов| 02.10.2026| Отпуск| 0 | 0 | Ежегодный|

Формулы для автоматического подсчёта:

  1. В ячейке H1 (количество рабочих дней в месяце): =ЧИСТРАБДНИ(ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(СЕГОДНЯ()); 1); КОНМЕСЯЦА(СЕГОДНЯ(); 0)).
  2. В столбце E (отработанные дни): =ЕСЛИ(ИЛИ(C2="Отпуск"; C2="Больничный"); 0; 1).
  3. В ячейке H2 (итого отработано): =СУММ(E:E).

☑️ Что должно быть в шаблоне табеля

Выполнено: 0 / 5
⚠️ Внимание: Если в вашей организации используются суммированный учёт рабочего времени или скользящие графики, шаблон нужно дополнить столбцами для учёта переработок и нормы часов за период (например, квартал).

Распространённые ошибки и как их избежать

Даже опытные пользователи 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 автоматически учитывать праздничные дни из производственного календаря?

Да, но для этого нужно:

  1. Скачать производственный календарь в формате Excel.
  2. Скопировать столбец с праздничными датами в отдельный лист вашего файла.
  3. В формуле ЧИСТРАБДНИ ссылаться на этот диапазон: =ЧИСТРАБДНИ(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))

Не забудьте добавить праздничные дни в третий аргумент!