Расчет отработанных дней в Microsoft Excel — одна из самых востребованных задач для кадровых специалистов, бухгалтеров и руководителей. Ошибки в таких вычислениях могут привести к неверному начислению зарплаты, искажению статистики по посещаемости или проблемам с отчетностью. В этой статье мы разберем не только базовые формулы, но и нюансы учета выходных, праздничных дней, отпусков и больничных — всё то, что делает задачу нетривиальной.
Вы узнаете, как автоматизировать процесс с помощью функций ДАТА, РАЗНДАТ, ЧИСТРАБДНИ и даже ЕСЛИ для сложных условий. Мы подробно разберем примеры для разных сценариев: от простого подсчета дней между двумя датами до учета производственного календаря с учетом региональных особенностей. А в конце статьи вас ждет шаблон готовой таблицы, который можно скачать и адаптировать под свои нужды.
1. Базовый расчет: разница между датами
Начнем с самого простого — подсчета количества дней между двумя датами. Эта задача решается с помощью функции РАЗНДАТ или простого вычитания. Например, если сотрудник работал с 01.06.2026 по 30.06.2026, то количество календарных дней можно посчитать так:
=РАЗНДАТ("01.06.2026"; "30.06.2026"; "d")
Или еще проще:
=ДАТА(2026;6;30)-ДАТА(2026;6;1)
Однако такой подход учитывает все календарные дни, включая выходные и праздники. Для большинства задач это не подходит — ведь сотрудник фактически не работал в субботу и воскресенье. Чтобы исключить выходные, используйте функцию ЧИСТРАБДНИ:
=ЧИСТРАБДНИ("01.06.2026"; "30.06.2026")
2. Учет праздничных дней: функция ЧИСТРАБДНИ.МЕЖД
Функция ЧИСТРАБДНИ игнорирует только субботы и воскресенья, но не учитывает государственные праздники. Например, 1 мая или 9 мая в России являются нерабочими днями, даже если они выпадают на будний день. Для таких случаев существует расширенная версия — ЧИСТРАБДНИ.МЕЖД, где можно указать список праздников.
Сначала создайте на отдельном листе таблицу с датами праздников (например, в диапазоне A2:A10). Затем используйте формулу:
=ЧИСТРАБДНИ.МЕЖД("01.06.2026"; "30.06.2026"; Лист2!A2:A10)
Важно: если праздничный день выпадает на выходной, он переносится на следующий рабочий день. Например, если 1 мая — это среда, то выходной переносится на четверг. В Excel это нужно учитывать вручную или использовать производственный календарь с уже учтенными переносами.
⚠️ Внимание: В разных странах и даже регионах России список праздничных дней может отличаться. Например, в Татарстане дополнительным выходным является День Республики (30 августа), а в Москве — нет. Всегда уточняйте актуальный производственный календарь для вашего региона.
Создать столбец с датами начала и конца периода|Подготовить список праздничных дней на отдельном листе|Проверить формат ячеек (должен быть "Дата")|Учесть региональные особенности праздников-->
3. Учет больничных, отпусков и других отсутствий
Если сотрудник брал больничный, отпуск за свой счет или находился в командировке, эти дни нужно исключить из расчета отработанных. Допустим, у вас есть таблица с датами отсутствий в диапазоне B2:B20. Тогда формула примет вид:
=ЧИСТРАБДНИ.МЕЖД("01.06.2026"; "30.06.2026"; Лист2!A2:A10) - СЧЁТЕСЛИМН(B2:B20; ">="&"01.06.2026"; B2:B20; "<="&"30.06.2026")
Здесь СЧЁТЕСЛИМН подсчитывает количество дней отсутствия, которые попадают в анализируемый период. Если у вас есть отдельные столбцы для разных типов отсутствий (например, больничный, отпуск, командировка), формулу можно усложнить:
=ЧИСТРАБДНИ.МЕЖД(НачДаты; КонДаты; Праздники) - СЧЁТЕСЛИМН(Больничные; ">="&НачДаты; Больничные; "<="&КонДаты) - СЧЁТЕСЛИМН(Отпуска; ">="&НачДаты; Отпуска; "<="&КонДаты)
Для удобства можно создать отдельные столбцы с количеством дней каждого типа отсутствий, а затем вычесть их из общего числа рабочих дней.
| Тип отсутствия | Формула для подсчета | Пример |
|---|---|---|
| Больничный | =СЧЁТЕСЛИМН(ДиапазонБольничных; ">="&НачДаты; ДиапазонБольничных; "<="&КонДаты) |
=СЧЁТЕСЛИМН(C2:C100; ">="&A2; C2:C100; "<="&B2) |
| Отпуск | =СЧЁТЕСЛИМН(ДиапазонОтпусков; ">="&НачДаты; ДиапазонОтпусков; "<="&КонДаты) |
=СЧЁТЕСЛИМН(D2:D100; ">="&A2; D2:D100; "<="&B2) |
| Командировка | =СУММПРОИЗВ(--(ДиапазонКомандировок>=НачДаты); --(ДиапазонКомандировок<=КонДаты)) |
=СУММПРОИЗВ(--(E2:E100>=A2); --(E2:E100<=B2)) |
4. Расчет отработанных дней за месяц с учетом неполного рабочего дня
Иногда сотрудник может работать неполный день (например, на 0.5 ставки или с гибким графиком). В таких случаях нужно учитывать не только количество дней, но и фактическую загрузку. Допустим, у вас есть столбец с коэффициентом занятости (например, 0.5 для половины ставки). Тогда формула будет такой:
=ЧИСТРАБДНИ.МЕЖД(НачДаты; КонДаты; Праздники) * КоэффициентЗанятости
Если коэффициент меняется в зависимости от дня (например, в понедельник — полный день, а в остальные дни — половина), то потребуется более сложная логика с использованием функции ВПР или ИНДЕКС/ПОИСКПОЗ для поиска индивидуального коэффициента для каждой даты.
Пример для гибкого графика:
=СУММПРОИЗВ(--(ДиапазонДат>=НачДаты); --(ДиапазонДат<=КонДаты); --(НЕТ(ПОИСКПОЗ(ДиапазонДат; Праздники; 0))); --(НЕТ(ПОИСКПОЗ(ДЕНЬНЕД(ДиапазонДат); {6;7}; 0))); КоэффициентыЗанятости)
Здесь КоэффициентыЗанятости — это столбец с значениями от 0 до 1, соответствующими каждой дате в ДиапазонДат.
Как учесть переработки?
Если сотрудник работал сверхурочно, можно добавить отдельный столбец с количеством дополнительных часов, а затем конвертировать их в дни. Например, если норма рабочего дня — 8 часов, то формула будет:
=ОтработанныеДни + (СверхурочныеЧасы / 8)
5. Автоматизация с помощью Power Query
Для крупных компаний с сотнями сотрудников ручной подсчет отработанных дней может стать утомительным. В этом случае на помощь приходит Power Query — инструмент для преобразования и загрузки данных. С его помощью можно:
- 📅 Импортировать данные о выходных и праздничных днях из внешних источников (например, с сайта правительства).
- 🔄 Автоматически обновлять производственный календарь при изменении законодательства.
- 📊 Объединять данные из разных источников (например, табеля учета рабочего времени и календаря отпусков).
- 📈 Строить динамические отчеты по отработанным дням с разбивкой по отделам или проектам.
Пример запроса в Power Query для подсчета отработанных дней:
- Импортируйте таблицу с датами работы сотрудников.
- Добавьте столбец с проверкой на выходной:
= if Date.DayOfWeek([Date]) = 6 or Date.DayOfWeek([Date]) = 0 then 0 else 1. - Добавьте столбец с проверкой на праздники (используйте список праздников как отдельную таблицу).
- Сложите значения из этих столбцов для каждой даты.
Готовый запрос можно сохранить и обновлять одним кликом при изменении исходных данных.
⚠️ Внимание: При использовании Power Query убедитесь, что формат дат в исходных данных соответствует формату в Excel. Например, если даты импортируются как текст (например,"01.06.2026"), их нужно преобразовать в формат даты с помощью функцииDate.From.
6. Готовые шаблоны и надстройки для Excel
Если вам нужно регулярно считать отработанные дни для большого количества сотрудников, имеет смысл использовать готовые решения:
- 📄 Шаблоны табеля учета рабочего времени — можно скачать на сайтах Microsoft Office или специализированных ресурсах (например, PlanFix или Битрикс24).
- 🛠️ Надстройки для Excel — например, Kutools for Excel или Ablebits имеют встроенные функции для работы с датами и календарями.
- 🌐 Облачные сервисы — Google Sheets с функцией
NETWORKDAYS(аналогЧИСТРАБДНИ) или специализированные HR-системы (Zoho People, BambooHR).
Пример надстройки Kutools for Excel:
- Установите надстройку через
Файл → Параметры → Надстройки → Перейти. - Выделите диапазон с датами.
- В меню Kutools выберите
Формулы → Дата и время → Рабочие дни между двумя датами. - Укажите диапазон с праздничными днями и получите результат.
Преимущество надстроек — они часто имеют более удобный интерфейс и дополнительные функции (например, визуализацию данных или экспорт в другие форматы). Однако их использование может потребовать покупки лицензии.
FAQ: Частые вопросы о расчете отработанных дней
Как посчитать отработанные дни, если сотрудник работал по сменному графику (например, 2 через 2)?
Для сменного графика нужно создать отдельную таблицу с расписанием смен для каждого сотрудника. Затем используйте функцию СУММПРОИЗВ с условиями, которые учитывают только рабочие смены. Пример:
=СУММПРОИЗВ(--(ДиапазонДат>=НачДаты); --(ДиапазонДат<=КонДаты); --(ДиапазонСмен="Рабочая"))
Где ДиапазонСмен — это столбец с пометками "Рабочая" или "Выходной" для каждой даты.
Можно ли автоматически подтягивать праздничные дни из интернета?
Да, это можно сделать с помощью Power Query или макросов на VBA. Например, можно написать скрипт, который парсит данные с сайта КонсультантПлюс или официального портала правительства. Однако такой подход требует навыков программирования и может нарушать условия использования некоторых сайтов. Альтернатива — ручной импорт данных один раз в год при обновлении производственного календаря.
Как учесть ночные смены, которые пересекают полуночь (например, с 22:00 до 06:00)?
В этом случае одна смена может относиться к двум разным календарным дням. Решение:
- Создайте столбец с точным временем начала и конца смены.
- Используйте функцию
ЦЕЛОЕдля округления до полных дней или считайте часы отдельно. - Для точного подсчета рабочего времени используйте формулу:
=ЕСЛИ(КонецСмены < НачалоСмены; (КонецСмены + 1) - НачалоСмены; КонецСмены - НачалоСмены)где
НачалоСменыиКонецСмены— это даты со временем в формате Excel.
Что делать, если в Excel неправильно отображаются даты (например, вместо 01.06.2026 показывает 45423)?
Это означает, что ячейки имеют общий формат вместо формата Дата. Чтобы исправить:
- Выделите проблемные ячейки.
- Нажмите правой кнопкой мыши и выберите
Формат ячеек. - Вкладка
Число→ выберитеДатаи нужный формат (например,14.03.2012). - Если даты хранятся как текст, используйте функцию
ДАТАЗНАЧдля преобразования.
Также проверьте региональные настройки Excel (в России по умолчанию используется формат ДД.ММ.ГГГГ, а в США — ММ/ДД/ГГГГ).
Как посчитать среднее количество отработанных дней по всему отделу?
Используйте функцию СРЗНАЧ для диапазона с результатами по каждому сотруднику. Например:
=СРЗНАЧ(C2:C100)
Где C2:C100 — это столбец с количеством отработанных дней для каждого сотрудника. Для более детального анализа можно использовать СРЗНАЧЕСЛИ, чтобы посчитать среднее только для определенной должности или отдела:
=СРЗНАЧЕСЛИ(C2:C100; A2:A100; "Менеджер")
Где A2:A100 — это столбец с должностями.