Расчёт отработанных дней в Microsoft Excel — одна из самых востребованных задач для HR-специалистов, бухгалтеров и руководителей. Казалось бы, что может быть проще: вычесть дату начала из даты окончания и получить результат? Но на практике всё усложняется учётом выходных дней, праздников, больничных, отпусков и даже неполных рабочих дней. Ошибка в расчётах может привести к неправильному начислению зарплаты, нарушению трудового законодательства или конфликтам с сотрудниками.
В этой статье мы разберём все возможные сценарии — от базовых формул до продвинутых техник с использованием СЕТДЕНЬ.НЕД, РАБДЕНЬ.МЕЖД и пользовательских функций. Вы узнаете, как автоматизировать расчёты для больших команд, избежать ошибок при работе с датами и даже создать динамический календарь выходных, который будет учитывать региональные праздники. Неважно, ведёте ли вы учёт для 5 или 500 сотрудников — после прочтения вы сможете настроить Excel так, чтобы он делал всю работу за вас.
Прежде чем перейти к формулам, давайте разберёмся с ключевыми понятиями:
- 📅 Календарные дни — все дни в период, включая выходные и праздники.
- 👔 Рабочие дни — дни, когда сотрудник должен был работать по графику (обычно пн-пт, но бывают исключения).
- ✅ Отработанные дни — фактически отработанные дни за вычетом больничных, отпусков и других отсутствий.
- 🚫 Нерабочие дни — выходные, праздники, дни по графику (например, у сменных работников).
1. Базовые формулы: как посчитать разницу между датами
Начнём с самого простого — расчёта календарных дней между двумя датами. Для этого достаточно вычесть одну дату из другой. Например, если сотрудник работал с 01.01.2026 по 31.01.2026, формула будет такой:
=B2-A2
Где:
A2— ячейка с датой начала периода.B2— ячейка с датой окончания периода.
Но здесь есть подводный камень: Excel хранит даты как числа (количество дней с 01.01.1900), поэтому результат будет в числовом формате. Чтобы отобразить его как дни, настройте формат ячейки:
- Выделите ячейку с результатом.
- Нажмите
Ctrl+1(или правая кнопка →Формат ячеек). - Выберите категорию
ОбщийилиЧисловойбез десятичных знаков.
Пример: Если в A2 стоит 01.01.2026, а в B2 — 31.01.2026, формула вернёт 30 (календарных дней).
2. Учёт выходных: функция РАБДЕНЬ
Формула из предыдущего раздела не учитывает выходные дни (обычно субботу и воскресенье). Для их исключения используйте функцию РАБДЕНЬ (или NETWORKDAYS в английской версии):
=РАБДЕНЬ(A2; B2)
Эта функция автоматически исключает субботу и воскресенье. Например, для периода с 01.01.2026 (понедельник) по 31.01.2026 (среда) результат будет 22 рабочих дня (из 30 календарных).
Но что, если у вас нестандартный график? Например, выходные в воскресенье и понедельник? Тогда используйте расширенный синтаксис:
=РАБДЕНЬ.МЕЖД(A2; B2; 1; C2:C10)
Где:
1— параметр, указывающий, что выходные — воскресенье и понедельник (см. таблицу ниже).C2:C10— диапазон с датами праздников (об этом подробнее в следующем разделе).
| Код выходных | Дни недели | Пример графика |
|---|---|---|
1 |
Воскресенье, понедельник | Торговые центры, некоторые госучреждения |
2 |
Понедельник, вторник | Редкий график, например, в некоторых странах |
11 |
Только воскресенье | Шестидневная рабочая неделя |
7 |
Суббота, воскресенье | Стандартный пятидневный график |
Как узнать номер дня недели в Excel?
Используйте функцию =ДЕНЬНЕД(A2; [тип_возврата]), где [тип_возврата] может быть:
1— число от 1 (воскресенье) до 7 (суббота).2— число от 1 (понедельник) до 7 (воскресенье).3— число от 0 (понедельник) до 6 (воскресенье).
Пример: =ДЕНЬНЕД("01.01.2026"; 2) вернёт 1 (понедельник).
3. Учёт праздников и региональных выходных
Функция РАБДЕНЬ не учитывает государственные праздники (например, 1 мая или 9 мая в России). Чтобы их исключить, нужно передать диапазон с датами праздников в третий аргумент функции РАБДЕНЬ.МЕЖД:
=РАБДЕНЬ.МЕЖД(A2; B2; ; D2:D10)
Где D2:D10 — столбец с датами праздников. Например:
| Ячейка | Дата | Праздник |
|---|---|---|
D2 |
01.01.2026 |
Новый год |
D3 |
07.01.2026 |
Рождество |
D4 |
23.02.2026 |
День защитника Отечества |
Важно: если праздничный день выпадает на выходной, он переносится на следующий рабочий день (например, суббота 4 ноября становится выходным в понедельник 6 ноября). В Excel этот перенос нужно учитывать вручную!
Для автоматизации можно создать отдельный лист с праздничными датами и ссылаться на него. Например:
=РАБДЕНЬ.МЕЖД(A2; B2; ; Праздники!A:A)
📌 Создать отдельный лист "Праздники"
📌 В столбец A ввести все праздничные даты на год
📌 Отформатировать столбец как "Дата"
📌 Заблокировать лист от редактирования (правый клик → "Защитить лист")
-->
4. Учёт отпусков, больничных и других отсутствий
Теперь усложним задачу: сотрудник мог брать отпуск, болеть или отсутствовать по другим причинам. Чтобы посчитать фактически отработанные дни, нужно вычесть дни отсутствия из рабочих дней.
Допустим:
A2— дата начала периода.B2— дата окончания периода.C2:C10— диапазон с датами праздников.D2:D5— даты отпуска сотрудника.E2:E3— даты больничного.
Формула будет такой:
=РАБДЕНЬ.МЕЖД(A2; B2; ; C2:C10) - СЧЁТЕСЛИМН(D2:D5; ">="&A2; D2:D5; "<="&B2) - СЧЁТЕСЛИМН(E2:E3; ">="&A2; E2:E3; "<="&B2)
Разберём по частям:
РАБДЕНЬ.МЕЖД(A2; B2; ; C2:C10)— считает рабочие дни без праздников.СЧЁТЕСЛИМН(D2:D5; ">="&A2; D2:D5; "<="&B2)— считает дни отпуска, попавшие в период.СЧЁТЕСЛИМН(E2:E3; ">="&A2; E2:E3; "<="&B2)— считает дни больничного.
Пример: Сотрудник работал с 01.01.2026 по 31.01.2026, брал отпуск с 15.01 по 19.01 (5 дней) и болел 25.01 и 26.01 (2 дня). Рабочих дней в январе — 22, минус 5 (отпуск) и 2 (больничный) = 15 отработанных дней.
5. Расчёт для неполного рабочего дня
Если сотрудник работал неполный день (например, 4 часа вместо 8), нужно учитывать это в расчётах. Здесь есть два подхода:
Способ 1: Пересчёт в полные дни
Допустим, неполный день считается как 0.5 отработанного дня. Тогда формула будет:
=РАБДЕНЬ.МЕЖД(A2; B2; ; C2:C10) - СЧЁТЕСЛИМН(D2:D5; ">="&A2; D2:D5; "<="&B2) - СЧЁТЕСЛИМН(E2:E3; ">="&A2; E2:E3; "<="&B2) + СЧЁТЕСЛИ(F2:F10; ">0")*0,5
Где F2:F10 — столбец с количеством неполных дней (например, 1 — если день неполный).
Способ 2: Учёт в часах
Если удобнее вести учёт в часах, создайте дополнительный столбец с количеством отработанных часов и используйте формулу:
=СУММ(G2:G31)/8
Где G2:G31 — часы, отработанные каждый день месяца, а 8 — стандартная продолжительность рабочего дня.
Для автоматизации можно создать табель учёта рабочего времени с формулами:
- 📅 Столбец A — даты месяца.
- 👔 Столбец B — тип дня (
Р— рабочий,В— выходной,О— отпуск,Б— больничный). - ⏰ Столбец C — отработанные часы.
- 📊 Столбец D — формула для подсчёта дней:
=ЕСЛИ(B2="Р"; ЕСЛИ(C2=8; 1; 0,5); 0).
6. Продвинутые техники: пользовательские функции и Power Query
Если вам нужно обрабатывать данные для большой компании (сотни сотрудников), стандартные формулы могут оказаться недостаточно гибкими. В этом случае поможет:
1. Пользовательская функция на VBA
Создайте функцию, которая будет учитывать индивидуальные графики работы, смены и переносы праздников. Пример кода для подсчёта отработанных дней с учётом выходных и праздников:
Function ОтработанныеДни(ДатаНачала As Date, ДатаОкончания As Date, Праздники As Range) As Double
Dim День As Date
Dim РабочиеДни As Double
РабочиеДни = 0
For День = ДатаНачала To ДатаОкончания
' Проверяем, не выходной ли день (суббота или воскресенье)
If Weekday(День, vbMonday) < 6 Then
' Проверяем, не праздничный ли день
If Application.WorksheetFunction.CountIf(Праздники, День) = 0 Then
РабочиеДни = РабочиеДни + 1
End If
End If
Next День
ОтработанныеДни = РабочиеДни
End Function
Чтобы использовать эту функцию:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Сохраните файл как
.xlsm(с поддержкой макросов). - В Excel используйте функцию как обычно:
=ОтработанныеДни(A2; B2; Праздники!A:A).
2. Power Query для импорта данных
Если данные хранятся в внешних источниках (например, в 1С или SQL), используйте Power Query для их импорта и преобразования:
- Перейдите на вкладку
Данные → Получить данные → Из файла/базы данных. - Загрузите данные о рабочем времени.
- Добавьте столбец с формулой для подсчёта отработанных дней.
- Обновите запрос при изменении исходных данных.
3. Динамические массивы (Excel 365)
В новых версиях Excel можно использовать функции ФИЛЬТР, СОРТ и УНИК для создания динамических отчётов. Например, чтобы получить список всех отработанных дней сотрудника за месяц:
=ФИЛЬТР(A2:A31; (ДЕНЬНЕД(A2:A31; 2) < 6) (СЧЁТЕСЛИ(Праздники!A:A; A2:A31) = 0) (СЧЁТЕСЛИ(Отпуска!A:A; A2:A31) = 0))
Как включить Power Query?
Если у вас Excel 2016 или новее, Power Query уже установлен. Чтобы его найти:
- В Excel 2016: вкладка
Данные → Получить и преобразовать. - В Excel 2019/365: вкладка
Данные → Получить данные. - Если нет, скачайте бесплатную надстройку Power Query с сайта Microsoft.
7. Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчёте отработанных дней. Вот самые распространённые:
⚠️ Внимание: Если в ячейке с датой стоит апостроф ('01.01.2026), Excel воспринимает её как текст! Удалите апостроф или используйтеДАТАЗНАЧдля преобразования:=ДАТАЗНАЧ("01.01.2026").
Ошибка 1: Неправильный формат даты
Excel может не распознать дату, если она введена в нестандартном формате (например, 1-янв-24 вместо 01.01.2026). Чтобы исправить:
- Выделите столбец с датами.
- Нажмите
Ctrl + 1и выберите форматДата. - Если даты не преобразуются, используйте функцию
=ДАТАЗНАЧ.
Ошибка 2: Пропущенные праздники
Забыли добавить перенос праздничного дня? Например, если 8 марта выпадает на субботу, выходной переносится на понедельник. В этом случае нужно вручную добавить 11.03.2026 в список праздников.
Ошибка 3: Неучтённые смены
Если у сотрудника сменный график (например, день-ночь-отдых), стандартные функции не подойдут. В этом случае:
- Создайте отдельную таблицу с графиком смен.
- Используйте
ВПРилиИНДЕКС/ПОИСКПОЗдля определения рабочих дней.
Ошибка 4: Округление результатов
При делении часов на 8 (для пересчёта в дни) может появиться дробная часть. Чтобы избежать ошибок округления, используйте =ОКРУГЛВНИЗ или =ОКРУГЛВВЕРХ в зависимости от правил учёта в вашей компании.
⚠️ Внимание: Если вы используетеРАБДЕНЬ.МЕЖДдля периода, включающего текущую дату, функция может вернуть некорректный результат из-за автоматического обновления времени. Зафиксируйте дату окончания с помощью=СЕГОДНЯ()-1, если нужно учитывать только полные дни.
8. Готовые шаблоны и примеры для скачивания
Чтобы сэкономить время, вы можете использовать готовые шаблоны для расчёта отработанных дней. Вот несколько вариантов:
1. Шаблон табеля рабочего времени
Скачайте файл с готовыми формулами для учёта:
- Автоматический подсчёт рабочих и отработанных дней.
- Учёт отпусков, больничных и командировок.
- График выходных (настраиваемый).
2. Шаблон для HR-отдела
Подходит для расчёта зарплаты с учётом:
- Окладной и почасовой оплаты.
- Премий и удержаний.
- Вывода данных по каждому сотруднику.
3. Шаблон с VBA-макросами
Для продвинутых пользователей — файл с пользовательскими функциями для:
- Автоматического импорта праздников из интернета.
- Генерации отчётов по отделам.
- Экспорта данных в 1С или Бухгалтерию.
Если вам нужно адаптировать шаблон под специфику вашей компании (например, добавить учёт ночных смен или региональные праздники), обратитесь к инструкции по настройке, которая прилагается к каждому файлу.
FAQ: Ответы на частые вопросы
Как посчитать отработанные дни, если сотрудник работает по скользящему графику (2 через 2)?
Для скользящего графика standardные функции РАБДЕНЬ не подойдут. Вам нужно:
- Создать таблицу с графиком работы сотрудника (например, в отдельном листе).
- Использовать функцию
СЧЁТЕСЛИМНдля подсчёта рабочих дней в период. - Вычесть дни отпусков и больничных.
Пример формулы:
=СЧЁТЕСЛИМН(График!A:A; ">="&A2; График!A:A; "<="&B2; График!B:B; "Р") - СЧЁТЕСЛИМН(Отпуска!A:A; ">="&A2; Отпуска!A:A; "<="&B2)
Где График!B:B — столбец с пометками (Р — рабочий день, В — выходной).
Можно ли автоматически обновлять список праздников из интернета?
Да, это можно сделать с помощью Power Query или VBA. Например, в Power Query:
- Перейдите на сайт с календарём праздников (например, КонсультантПлюс).
- Скопируйте таблицу с праздничными датами.
- В Excel:
Данные → Из таблицы/диапазона(вставьте скопированные данные). - Преобразуйте данные в формат даты и загрузите в лист "Праздники".
Для автоматического обновления напишите VBA-макрос, который будет парсить данные с сайта раз в месяц.
Как посчитать отработанные дни для внешнего совместителя, который работает 2 дня в неделю?
Используйте функцию СЧЁТЕСЛИМН с учётом фиксированных рабочих дней. Например, если сотрудник работает по понедельникам и средам:
=СЧЁТЕСЛИМН(РядДат; ">="&A2; РядДат; "<="&B2; ДЕНЬНЕД(РядДат; 2); 1) + СЧЁТЕСЛИМН(РядДат; ">="&A2; РядДат; "<="&B2; ДЕНЬНЕД(РядДат; 2); 3)
Где РядДат — столбец с датами за период (можно сгенерировать с помощью ДАТА и СТРОКА).
Что делать, если в Excel неправильно считаются даты до 1900 года?
Excel для Windows использует систему дат с 01.01.1900 (в macOS — с 01.01.1904). Даты до 1900 года не поддерживаются. Если вам нужно работать с историческими данными:
- Используйте текстовый формат (например,
"01.01.1899") и обрабатывайте данные как строки. - Напишите пользовательскую функцию на VBA для расчёта разницы между "датами" в текстовом формате.
Как экспортировать данные об отработанных днях в 1С или Бухгалтерию?
Для экспорта в 1С:
- Сформируйте отчёт в Excel с нужными столбцами (ФИО, табельный номер, отработанные дни).
- Сохраните файл в формате
.csv(Файл → Сохранить как → CSV). - В 1С используйте обработку
Загрузка данных из Excel(обычно находится в менюСервис).
Для Бухгалтерии (например, БухСофт):
- Используйте формат
.xlsxс заранее согласованной структурой. - Проверьте, чтобы названия столбцов совпадали с требованиями программы.