Почему расчёт дней в Excel — это не тривиальная задача
На первый взгляд, подсчёт дней между двумя датами кажется элементарной операцией: взял календарь, посчитал разницу — и готово. Но в Microsoft Excel и Google Таблицах эта задача обретает десятки нюансов. Здесь важно не только получить цифру, но и учесть рабочие/выходные дни, праздники, временные зоны, а иногда — даже особенности календарных систем (например, исламский или еврейский календарь).
Более того, ошибки в таких расчётах могут стоить дорого: неправильно посчитанные сроки поставок в логистике, просроченные контракты в юриспруденции или неверные данные в финансовых отчётах. Эта статья поможет избежать ловушек и научит точному подсчёту дней в любых сценариях — от простейших до профессиональных.
Базовый метод: функция ДАТАРАЗН (DATEDIF)
Самый универсальный инструмент для расчёта разницы между датами — функция ДАТАРАЗН (в английской версии — DATEDIF). Она скрыта в списке функций Excel, но работает во всех версиях программы, включая Excel 365, Excel 2019 и Excel Online.
Синтаксис функции:
=ДАТАРАЗН(начальная_дата; конечная_дата; единица_измерения)
Где единица_измерения может принимать значения:
- 📅 "D" — количество дней (полная разница)
- 📆 "M" — количество полных месяцев
- 📅 "Y" — количество полных лет
- 📌 "YM" — месяцы без учёта лет
- 📌 "MD" — дни без учёта месяцев и лет
- 📌 "YD" — дни без учёта годов
Пример: чтобы узнать, сколько дней прошло с 01.01.2023 до 15.03.2023, используйте:
=ДАТАРАЗН("01.01.2023"; "15.03.2023"; "D")
Результат: 73 дня.
Простое вычитание дат: когда формулы не нужны
В Excel даты хранятся как числа (количество дней с 01.01.1900), поэтому их можно вычитать напрямую. Этот метод работает быстрее, чем ДАТАРАЗН, если нужна только разница в днях.
Пример:
=B2-A2
Где A2 — ячейка с начальной датой, а B2 — с конечной. Результат будет в числовом формате. Чтобы отобразить его как дни, измените формат ячейки на Общий.
| Начальная дата (A2) | Конечная дата (B2) | Формула | Результат |
|---|---|---|---|
| 10.05.2023 | 20.05.2023 | =B2-A2 |
10 |
| 01.01.2023 | 31.12.2023 | =B2-A2 |
364 |
| 15.02.2023 | 15.03.2023 | =ДАТАРАЗН(A2;B2;"D") |
28 |
⚠️ Внимание: Если конечная дата раньше начальной, результат будет отрицательным. Чтобы избежать ошибок, используйте функцию АБС:
=АБС(B2-A2)
Учёт рабочих дней: функции ЧИСТРАБДНИ и РАБДЕНЬ
Для бизнес-задач часто требуется посчитать только рабочие дни, исключая выходные (субботу и воскресенье) и праздники. Здесь пригодятся две функции:
- 📊
ЧИСТРАБДНИ(NETWORKDAYS) — считает количество рабочих дней между датами. - 📅
РАБДЕНЬ(WORKDAY) — добавляет рабочие дни к дате (полезно для планирования сроков).
Синтаксис ЧИСТРАБДНИ:
=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])
Где [праздники] — необязательный диапазон ячеек с датами праздников.
Пример: подсчёт рабочих дней с 01.06.2023 по 30.06.2023 без учёта праздников:
=ЧИСТРАБДНИ("01.06.2023"; "30.06.2023")
Результат: 21 рабочий день (июнь 2023 года имеет 30 дней, из них 8 выходных).
Как добавить праздники в расчёт?
Чтобы исключить праздники, создайте список их дат в отдельном диапазоне (например, D2:D10) и укажите его третьим аргументом:
=ЧИСТРАБДНИ("01.06.2023"; "30.06.2023"; D2:D10)
⚠️ Внимание: Функция ЧИСТРАБДНИ считает субботу и воскресенье выходными по умолчанию. Если у вас другой график (например, выходной — пятница), используйте ЧИСТРАБДНИ.МЕЖД (NETWORKDAYS.INTL), где можно задать свои выходные дни.
Продвинутый уровень: ЧИСТРАБДНИ.МЕЖД для нестандартных графиков
Функция ЧИСТРАБДНИ.МЕЖД (NETWORKDAYS.INTL) позволяет настроить произвольные выходные дни с помощью числового кода или строки. Это актуально для:
- 🏭 Сменного графика (например, 2 через 2).
- 🌍 Стран с нестандартными выходными (например, ОАЭ — пятница-суббота).
- 🏥 Организаций с круглосуточным режимом (выходные по скользящему графику).
Синтаксис:
=ЧИСТРАБДНИ.МЕЖД(начальная_дата; конечная_дата; [выходные]; [праздники])
Аргумент [выходные] может быть:
- 🔢 Числом (например,
1— суббота-воскресенье,11— только воскресенье). - 📜 Строкой (например,
"0000011", где1— выходной,0— рабочий день, начиная с понедельника).
Пример: подсчёт рабочих дней для графика "пятница-суббота" (как в ОАЭ):
=ЧИСТРАБДНИ.МЕЖД("01.06.2023"; "30.06.2023"; "0000110")
Создать список праздников в отдельном диапазоне
Проверить формат ячеек с датами (должен быть "Дата")
Выбрать правильную функцию (ЧИСТРАБДНИ или ЧИСТРАБДНИ.МЕЖД)
Указать выходные дни (если график нестандартный)
-->
Расчёт дней с учётом времени: функция РАЗНДАТ для точности до секунд
Если вам нужно посчитать не только дни, но и часы, минуты или секунды между двумя моментами времени, используйте функцию РАЗНДАТ (DATEDIF) в комбинации с форматированием ячеек.
Пример: расчёт разницы между 01.06.2023 14:30 и 05.06.2023 09:15:
- Введите даты с временем в ячейки
A2иB2. - Используйте формулу:
=B2-A2. - Измените формат ячейки на
[ч]:мм:сс(для отображения часов) илид.м.гг ч:мм(для дней и времени).
Результат: 3 дня 18 часов 45 минут.
⚠️ Внимание: Если даты введены как текст (например, "01.06.2023 14:30"), Excel воспримет их как строки, а не как даты. Используйте функцию ДАТАЗНАЧ для преобразования:
=ДАТАЗНАЧ("01.06.2023 14:30")
Ошибки и ловушки: почему Excel считает дни неправильно
Даже опытные пользователи сталкиваются с ошибками при подсчёте дней. Вот самые распространённые причины:
- Формат ячеек: Даты хранятся как числа, но отображаются в формате даты. Если ячейка имеет формат
ТекстилиОбщий, Excel не распознает её как дату. - Двузначные годы: Ввод даты как
01.06.23может быть интерпретирован как1923или2023год в зависимости от настроек системы. - Високосные годы: Функции Excel автоматически учитывают високосные годы (например, 2026), но ошибки могут возникнуть при ручном вводе дат.
- Часовой пояс: Если даты получены из разных источников (например, Google Analytics и 1С), они могут относиться к разным часовым поясам.
Критическая ошибка: функция ДАТАРАЗН не работает с датами до 01.01.1900. Для исторических расчётов используйте альтернативные методы, например, преобразование дат в юлианские дни.
FAQ: Ответы на частые вопросы
Как посчитать дни между сегодняшней датой и другой датой?
Используйте функцию СЕГОДНЯ (TODAY):
=ДАТАРАЗН(СЕГОДНЯ(); "31.12.2023"; "D")
Эта формула вернёт количество дней до конца 2023 года. Обратите внимание: функция СЕГОДНЯ пересчитывается при каждом открытии файла.
Можно ли посчитать дни между датами в Google Таблицах?
Да, все описанные функции работают в Google Sheets, включая DATEDIF, NETWORKDAYS и WORKDAY. Синтаксис идентичен Excel, но некоторые функции могут иметь англоязычные названия даже в русской версии.
Как посчитать количество полных недель между датами?
Разделите разницу в днях на 7 и округлите в меньшую сторону:
=ЦЕЛОЕ((B2-A2)/7)
Или используйте функцию ОТБР:
=ОТБР((B2-A2)/7; 0)
Почему результат формулы отображается как ######?
Это означает, что:
- Результат слишком большой для ячейки (расширьте столбец).
- Формат ячейки неверный (измените на
ОбщийилиДата). - Отрицательное значение (проверьте порядок дат).
Как посчитать дни с учётом только будних дней (понедельник-пятница)?
Используйте функцию ЧИСТРАБДНИ без указания праздников:
=ЧИСТРАБДНИ(A2; B2)
Она автоматически исключает субботу и воскресенье.