Расчет рабочих дней и трудового стажа в Excel
Чтобы посчитать количество рабочих дней между двумя датами или определить трудовой стаж сотрудника в годах и месяцах, используйте встроенные функции NETWORKDAYS (для дней) и DATEDIF (для стажа). Эти инструменты автоматически исключают выходные и позволяют учитывать список государственных праздников, что критически важно для точного табеля учета рабочего времени и кадровых отчетов.
Основные функции для работы с датами
В арсенале Excel есть четыре ключевые функции для решения задач календарного планирования и кадрового учета. Понимание разницы между ними поможет избежать ошибок в расчетах.
| Функция | Назначение | Ключевой параметр |
|---|---|---|
| NETWORKDAYS | Считает кол-во рабочих дней между датами | Исключает сб/вс по умолчанию |
| NETWORKDAYS.INTL | Считает рабочие дни с гибким графиком | Позволяет задать любые выходные |
| WORKDAY | Вычисляет дату окончания срока | Прибавляет рабочие дни к старту |
| DATEDIF | Рассчитывает разницу между датами | Возвращает годы, месяцы или дни |
Функция DATEDIF не отображается в списке подсказок Excel при вводе, но работает корректно. Просто вводите её название вручную.
Как посчитать количество рабочих дней
Самая частая задача — узнать, сколько полных рабочих дней содержится в периоде от даты начала до даты конца.
Стандартный график (выходные: суббота и воскресенье)
Используйте функцию NETWORKDAYS. Синтаксис прост:
=NETWORKDAYS(начальная_дата; конечная_дата; [праздники])
Пример: Если дата начала в ячейке A2, а дата окончания в B2:
=NETWORKDAYS(A2; B2)
Эта формула вернет число дней, исключая все субботы и воскресенья внутри периода. Даты начала и конца включаются в расчет как рабочие дни (если они не выпадают на выходной).
Учет государственных праздников
Для точного производственного календаря необходимо исключить праздничные дни. Создайте отдельный диапазон ячеек (например, E2:E15), куда внесите даты праздников.
Формула:
=NETWORKDAYS(A2; B2; E2:E15)
Теперь результат будет уменьшен на количество праздников, попавших в указанный период.
Убедитесь, что даты в списке праздников имеют формат «Дата», а не текст. Иначе функция их проигнорирует, и расчет будет неверным.
Настройка нестандартных выходных (NETWORKDAYS.INTL)
Если в вашей организации сменный график или выходные дни отличаются от стандартных (например, только воскресенье или пятница с субботой), используйте функцию NETWORKDAYS.INTL.
Она позволяет задать код выходных дней третьим аргументом. Код может быть числом (от 1 до 17) или строкой из семи символов («0» — рабочий, «1» — выходной), начиная с понедельника.
Примеры кодов:
"0000011"— выходные суббота и воскресенье (стандарт)."0000001"— выходной только воскресенье."1111110"— выходной только понедельник."0000111"— выходные четверг, пятница и суббота.
Формула для графика с одним выходным (воскресенье):
=NETWORKDAYS.INTL(A2; B2; "0000001"; E2:E15)
Здесь A2 и B2 — период, "0000001" — настройка выходных, E2:E15 — список праздников.
Расчет трудового стажа
Для кадровой отчетности часто требуется вывести стаж в формате «Х лет Y месяцев». Стандартное вычитание дат здесь не подойдет, так как даст результат в днях. Используйте скрытую, но мощную функцию DATEDIF.
Формула полного стажа (Годы + Месяцы)
Чтобы получить строку вида «5 лет 3 мес», объедините два вызова функции:
=DATEDIF(A2; TODAY(); "Y") & " лет " & DATEDIF(A2; TODAY(); "YM") & " мес"
Где:
- A2 — дата приема на работу.
- TODAY() — текущая дата (можно заменить на дату увольнения).
- "Y" — возвращает количество полных лет.
- "YM" — возвращает количество месяцев без учета лет (остаток).
Детализация до дней
Если нужна максимальная точность (например, для расчета больничных или отпусков):
=DATEDIF(A2; TODAY(); "Y") & " лет " & DATEDIF(A2; TODAY(); "YM") & " мес " & DATEDIF(A2; TODAY(); "MD") & " дн"
Параметр "MD" показывает количество дней без учета полных месяцев и лет.
Если дата увольнения еще не наступила, используйте функцию СЕГОДНЯ() (TODAY()). Если сотрудник уволен, замените её на ссылку на ячейку с датой увольнения.
Определение даты окончания работ (WORKDAY)
Часто нужно не посчитать дни, а узнать дату: «Если мы начнем проект сегодня и он займет 20 рабочих дней, когда мы закончим?». Для этого служит функция WORKDAY.
Формула:
=WORKDAY(начальная_дата; кол-во_дней; [праздники])
Пример: Начало в A2, длительность 10 дней, праздники в E2:E10:
=WORKDAY(A2; 10; E2:E10)
Результатом будет конкретная дата завершения. Функция автоматически «перепрыгнет» через выходные и праздники. Для нестандартных графиков используйте WORKDAY.INTL с аналогичными кодами выходных, как в NETWORKDAYS.INTL.
Частые ошибки при расчетах
- Ошибка #ЗНАЧ! (#VALUE!): Возникает, если в ячейках с датами хранится текст. Проверьте формат ячеек (должен быть «Дата») и убедитесь, что разделители в датах соответствуют настройкам системы.
- Отрицательный результат: Если дата окончания меньше даты начала, функции вернут ошибку или отрицательное число. Всегда проверяйте порядок дат.
- Игнорирование праздников: Самая распространенная ошибка в табелях. Забывая указать третий аргумент (диапазон праздников), вы завышаете количество рабочих дней.
- Неверный код региона: В
NETWORKDAYS.INTLлегко перепутать порядок дней в строке кода. Помните: первый символ — это понедельник, последний — воскресенье.
FAQ
Можно ли посчитать стаж только в месяцах?
Да. Используйте формулу =DATEDIF(A2; TODAY(); "M"). Она вернет общее количество полных месяцев между датами.
Как сделать список праздников динамическим?
Преобразуйте диапазон с праздниками в «Умную таблицу» (Ctrl+T). Тогда при добавлении нового праздника формула автоматически подхватит новую строку, если вы используете ссылку на столбец таблицы (например, Table1[Праздники]).
Что делать, если дата начала позже даты конца?
Функции NETWORKDAYS и DATEDIF требуют, чтобы первая дата была раньше второй. Если порядок может меняться, оберните формулу в проверку: =ЕСЛИ(A2>B2; NETWORKDAYS(B2; A2); NETWORKDAYS(A2; B2)).