Расчёт количества дней между датами — одна из самых востребованных операций в Microsoft Excel и Google Таблицах. Без этого не обойтись при планировании проектов, учёте рабочего времени, анализе финансовых периодов или даже составлении личного графика. Казалось бы, что может быть проще: вычесть одну дату из другой? Но на практике пользователи сталкиваются с десятками нюансов: как исключить выходные, учесть праздники, посчитать только рабочие дни или, например, определить количество полных недель между двумя датами.
Эта статья не просто перечислит формулы — она разберёт 7 реальных сценариев с пошаговыми инструкциями, примерами из бизнеса и лайфхаками для автоматизации. Вы узнаете, как избежать типичных ошибок (например, когда Excel вдруг начинает отображать даты как числа), как работать с динамическими диапазонами и почему функция ДАТАЗНАЧ может спасти ваши нервы при импорте данных из текстового файла. А в конце — бонус: готовая таблица с формулами для копирования и адаптации под свои задачи.
1. Базовый расчёт: разница между двумя датами
Начнём с самого простого — определения количества дней между двумя датами. В Excel для этого не нужно никаких специальных функций: достаточно вычесть одну дату из другой. Но даже здесь есть подводные камни.
Предположим, у вас в ячейке A1 дата начала проекта — 15.05.2026, а в B1 — дата окончания — 30.06.2026. Формула будет выглядеть так:
=B1-A1
Результат: 46 дней. Но что если вместо даты Excel показывает странное число вроде 45389? Это значит, что ячейки отформатированы как общий текст, а не как дата. Исправляется за две секунды:
- 📅 Выделите ячейки с датами → правая кнопка мыши →
Формат ячеек→ выберитеДата. - 🔢 Если даты хранятся как текст (например, после импорта из CSV), используйте функцию
=ДАТАЗНАЧ(A1)для преобразования. - ⚠️ Проверьте региональные настройки: в российской версии Excel по умолчанию используется формат
ДД.ММ.ГГГГ, а в американской —ММ/ДД/ГГГГ.
Важно: Excel хранит даты как последовательные числа, где 1 января 1900 года — это 1, а каждая последующая дата увеличивается на единицу. Именно поэтому вычитание работает корректно.
2. Расчёт рабочих дней (исключая выходные)
В большинстве бизнес-задач требуется учитывать только рабочие дни, исключая субботу и воскресенье. Для этого в Excel есть специальная функция ЧИСТРАБДНИ (англ. NETWORKDAYS). Её синтаксис:
=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])
Пример: рассчитаем количество рабочих дней между 01.06.2026 (ячейка A2) и 15.06.2026 (ячейка B2), исключив выходные:
=ЧИСТРАБДНИ(A2; B2)
Результат: 11 рабочих дней (из 15 календарных).
Но что если в вашей компании выходные не суббота-воскресенье, а, например, пятница-суббота? Или нужно исключить государственные праздники? Для этого:
- 📊 Для нестандартных выходных используйте функцию
ЧИСТРАБДНИ.МЕЖД(англ.NETWORKDAYS.INTL), где можно указать параметр выходных дней (например,11для выходных в пятницу-субботу). - 🎉 Чтобы исключить праздники, создайте отдельный диапазон с датами праздников (например,
D1:D10) и добавьте его в формулу:=ЧИСТРАБДНИ(A2; B2; D1:D10).
⚠️ Внимание: Если в диапазоне праздников есть даты выходных дней, они всё равно будут учтены дважды (как выходной и как праздник). Чтобы избежать дублирования, используйте функцию ЕСЛИОШИБКА для проверки.
Убедитесь, что ячейки с датами отформатированы как дата|Создайте отдельный список праздников (если нужны)|Проверьте региональные настройки для корректного отображения|Используйте ЧИСТРАБДНИ.МЕЖД для нестандартных выходных-->
3. Учёт праздников и индивидуальных нерабочих дней
Допустим, вам нужно рассчитать срок выполнения заказа с учётом того, что 12 июня — государственный праздник, а 17 июня — корпоративный выходной. Как быть?
Сначала создаём список всех нерабочих дней в отдельном диапазоне (например, E1:E5):
12.06.2026
17.06.2026
01.05.2026
09.05.2026
Затем модифицируем формулу:
=ЧИСТРАБДНИ(A3; B3; E1:E5)
Но что если праздники выпадают на выходные? Например, 1 мая 2026 года — это среда, а 9 мая — четверг. В этом случае они автоматически учитываются как нерабочие дни, даже если попадают на будний день. Однако если праздник выпадает на субботу или воскресенье, он не увеличивает количество выходных (так как выходной уже был). Чтобы "перенести" такой праздник на следующий рабочий день (как это делается в бухгалтерии), потребуется более сложная формула:
=ЧИСТРАБДНИ(A3; B3; E1:E5) + СЧЁТЕСЛИМН(E1:E5; ">="&A3; E1:E5; "<="&B3; E1:E5; ТИП.ОШИБКИ(ДЕНЬНЕД(E1:E5;2)))
Эта формула добавляет к результату количество праздников, выпавших на выходные. Для упрощения можно использовать пользовательскую функцию на VBA, но это уже тема для отдельной статьи.
| Сценарий | Формула | Пример результата (01.06–15.06.2026) |
|---|---|---|
| Все календарные дни | =B1-A1 |
15 |
| Рабочие дни (без праздников) | =ЧИСТРАБДНИ(A1;B1) |
11 |
| Рабочие дни с праздниками | =ЧИСТРАБДНИ(A1;B1;E1:E5) |
9 |
| Недели между датами | =ЦЕЛОЕ((B1-A1)/7) |
2 |
4. Расчёт дней в определённом формате (недели, месяцы, годы)
Иногда требуется не просто количество дней, а их представление в более удобном виде — например, в неделях, месяцах или даже годах. Вот несколько полезных формул:
- 📅 Полные недели:
=ЦЕЛОЕ((B1-A1)/7)или=ОТБР(B1-A1;7)(округление вниз). - 📆 Месяцы между датами:
=ДРОБЬ.ГОД(A1;B1;1)(возвращает количество полных месяцев). Для Excel 2019 и новее. - 🎂 Возраст в годах:
=ДРОБЬ.ГОД(A1;B1;3)(учитывает день рождения). - ⏳ Остаток дней после полных недель:
=ОСТАТ(B1-A1;7).
Пример: если между датами 30 дней, то:
=ЦЕЛОЕ(30/7)→ 4 полные недели,=ОСТАТ(30;7)→ 2 дня остатка.
Для визуализации результата можно использовать условное форматирование. Например, чтобы выделить красным ячейки, где остаток дней меньше 3:
- Выделите ячейку с результатом.
- Перейдите на вкладку
Главная → Условное форматирование → Создать правило. - Выберите
Форматировать только ячейки, которые содержат. - Установите условие:
Значение меньше 3и выберите красный цвет заливки.
5. Динамический расчёт с учётом текущей даты
Часто требуется рассчитать дни от сегодняшней даты до какой-либо будущей (или прошедшей). Например, сколько дней осталось до дедлайна проекта или сколько прошло с момента последнего обновления данных.
Для этого используйте функцию СЕГОДНЯ (англ. TODAY), которая всегда возвращает текущую дату. Примеры:
- 📌 Дней до дедлайна:
=B1-СЕГОДНЯ()(еслиB1— дата дедлайна). - ⏪ Дней с последнего обновления:
=СЕГОДНЯ()-A1(еслиA1— дата обновления). - ⚠️ Проверка просрочки:
=ЕСЛИ(B1-СЕГОДНЯ()<0; "Просрочено"; "В срок").
Функция СЕГОДНЯ пересчитывается автоматически при каждом открытии файла или изменении данных. Если вам нужно зафиксировать текущую дату (например, для отчёта), используйте комбинацию клавиш Ctrl + ; (точка с запятой) — это вставит статическую дату.
⚠️ Внимание: Если файл Excel открывается на другом компьютере с другими региональными настройками, функцияСЕГОДНЯможет показать неверную дату. Чтобы избежать этого, используйте форматДД.ММ.ГГГГи проверяйте настройки вФайл → Параметры → Язык.
Как заставить СЕГОДНЯ обновляться чаще?
По умолчанию Excel обновляет функцию СЕГОДНЯ только при открытии файла или изменении данных. Чтобы принудительно обновить её вручную, нажмите F9 (пересчёт всех формул) или используйте VBA-макрос с таймером. Однако частые обновления могут замедлить работу больших файлов.
6. Расчёт дней с учётом рабочего времени (часы и минуты)
В некоторых случаях недостаточно знать количество календарных или рабочих дней — нужно учитывать рабочие часы. Например, если задача должна быть выполнена за 40 часов, а рабочий день длится 8 часов, сколько это займёт дней?
Для такого расчёта используйте формулу:
=ОКРУВВЕРХ(общее_количество_часов / часы_в_рабочем_дне; 0)
Пример: =ОКРУВВЕРХ(40/8; 0) → 5 дней.
Но что если рабочие часы неравномерны? Например, в понедельник — 8 часов, а в остальные дни — по 7? В этом случае создайте таблицу с расписанием рабочих часов по дням и используйте функцию СУММПРОИЗВ:
=СУММПРОИЗВ(
--(ДЕНЬНЕД(СТРОКА(ДВССЫЛ("A1:A"&КОЛ_DАТ))-1)=Пн_Вт_Ср_Чт_Пт);
Часы_по_дням
)
Где:
КОЛ_DАТ— количество дней между датами,Пн_Вт_Ср_Чт_Пт— массив с номерами дней недели (2=понедельник, 3=вторник и т.д.),Часы_по_дням— массив с количеством рабочих часов для каждого дня.
Для автоматизации можно создать таблицу рабочих часов и ссылаться на неё в формулах. Это особенно удобно для компаний с гибким графиком.
7. Продвинутые сценарии: банковские дни, производственные циклы
В финансовой сфере и производстве часто используются банковские дни (исключающие не только выходные, но и дни, когда банки не проводят операции) или производственные циклы (где учитываются смены, простои оборудования и т.д.). Рассмотрим два примера:
1. Банковские дни (исключая дни без операций):
Помимо стандартных выходных, банки не работают в некоторые праздники и могут иметь свои "технические дни". Создайте расширенный список нерабочих дней (включая банковские праздники) и используйте:
=ЧИСТРАБДНИ(A1; B1; Банковские_праздники)
2. Производственный цикл (с учётом смен):
Если производство работает в 3 смены по 8 часов, то "производственный день" может отличаться от календарного. Например, 24 часа непрерывной работы = 3 смены = 1 производственный день. Формула для расчёта количества производственных дней:
=ОКРУВВЕРХ(общие_часы_работы / (количество_смен * часы_в_смене); 0)
Пример: если оборудование работало 100 часов при 3 сменах по 8 часов, то:
=ОКРУВВЕРХ(100 / (3*8); 0) → 5 производственных дней.
Для учёта простоев (например, из-за технического обслуживания) добавьте в формулу вычитание нерабочих часов:
=ОКРУВВЕРХ((общие_часы_работы - часы_простоев) / (количество_смен * часы_в_смене); 0)
FAQ: Ответы на частые вопросы
Как посчитать дни между датами, если они записаны как текст (например, "15 мая 2026")?
Используйте функцию ДАТАЗНАЧ для преобразования текста в дату:
=ДАТАЗНАЧ("15 мая 2026")
Если текст в ячейке A1, формула будет:
=ДАТАЗНАЧ(A1)
Для английского формата (например, "May 15, 2026") может потребоваться замена месяца на русский или использование функции ПОДСТАВИТЬ.
Почему Excel показывает ###### вместо даты?
Это означает, что ширина столбца недостаточна для отображения даты. Растяните столбец или измените формат ячейки на более компактный (например, ДД.ММ.ГГ вместо ДД ММММ ГГГГ). Также проверьте, что в ячейке действительно дата, а не текст или ошибка.
Как посчитать только будние дни, исключая конкретные даты (например, отпуска сотрудников)?
Создайте отдельный список с датами отпусков и добавьте его в функцию ЧИСТРАБДНИ как третий аргумент:
=ЧИСТРАБДНИ(A1; B1; Отпуска!A1:A10)
Где Отпуска!A1:A10 — диапазон с датами отпусков на другом листе.
Можно ли автоматически обновлять дату при изменении данных в другой ячейке?
Да, используйте комбинацию функций СЕГОДНЯ и ЕСЛИ. Например, чтобы фиксировать дату только при изменении статуса задачи:
=ЕСЛИ(C1="Выполнено"; ЕСЛИ(D1=""; СЕГОДНЯ(); D1); "")
Где C1 — ячейка со статусом, а D1 — ячейка с датой завершения.
Как посчитать дни между датами в Google Таблицах?
Формулы в Google Таблицах идентичны Excel, но названия функций на английском:
=DAYS(B1, A1)— разница в днях,=NETWORKDAYS(A1, B1)— рабочие дни,=TODAY()— текущая дата.
Для русскоязычной версии Google Таблиц можно использовать те же названия функций, что и в Excel (например, =ЧИСТРАБДНИ).