Почему расчёт дней в Excel — это не так просто, как кажется
На первый взгляд, задача посчитать дни между произвольной датой и сегодняшним днём в Microsoft Excel или Google Таблицах выглядит тривиальной. Однако даже опытные пользователи сталкиваются с подводными камнями: формулы возвращают ошибки, учитывают выходные неправильно или игнорируют временные зоны. Например, если вы пытаетесь вычислить срок действия договора или время до дедлайна проекта, погрешность в один день может стать критичной.
Проблема усложняется тем, что Excel хранит даты как числовые значения (количество дней с 1 января 1900 года), а функция СЕГОДНЯ() — динамическая. Это значит, что при каждом открытии файла результат пересчитывается. Если не учесть этот нюанс, можно получить неверные данные в архивных отчётах. В этой статье разберём 5 надёжных способов расчёта дней — от базовых до продвинутых, с учётом рабочих дней, временных интервалов и даже часов.
Особое внимание уделим типичным ошибкам. Например, почему формула =ДАТАЗНАЧ("31.12.2026")-СЕГОДНЯ() может вернуть #ЗНАЧ!, если ваш компьютер настроен на американский формат дат. Или как избежать проблемы с "лишним днём" при переходе на зимнее время. Готовы? Начнём с самого простого.
Способ 1: Базовая формула с функцией СЕГОДНЯ()
Самый универсальный и быстрый метод — вычесть текущую дату из целевой. Для этого используется комбинация функций СЕГОДНЯ() и простого вычитания. Формула выглядит так:
=[Ячейка_с_датой] - СЕГОДНЯ()
Пример: Если в ячейке A2 указана дата 15.05.2026, формула =A2-СЕГОДНЯ() вернёт количество дней до этого числа. Важно: результат будет динамическим — при открытии файла завтра значение уменьшится на 1.
- ✅ Плюсы: Простота, работает во всех версиях Excel (включая Excel 2003 и Excel Online).
- ⚠️ Минусы: Не учитывает рабочие/выходные дни, временные зоны.
- 📌 Нюанс: Если целевая дата прошла, результат будет отрицательным (например,
-15означает, что событие было 15 дней назад).
Чтобы избежать ошибок формата, убедитесь, что ячейка с датой имеет правильный тип. Для этого:
- Выделите ячейку с датой.
- Нажмите
Ctrl+1(или правая кнопка →Формат ячеек). - Выберите категорию
Датаи укажите нужный формат (например,14.03.2026).
Способ 2: Расчёт рабочих дней (исключая выходные)
Если вам нужно посчитать только рабочие дни (например, для расчёта срока доставки или выполнения задачи), используйте функцию ЧИСТРАБДНИ(). Она автоматически исключает субботы и воскресенья. Синтаксис:
=ЧИСТРАБДНИ(СЕГОДНЯ(); [Ячейка_с_датой])
Пример: Формула =ЧИСТРАБДНИ(СЕГОДНЯ(); "30.06.2026") вернёт количество рабочих дней до 30 июня 2026 года. Если сегодня 10.05.2026, результат будет около 290 (в зависимости от выходных).
Для учёта праздников добавьте третий аргумент — диапазон с датами нерабочих дней:
=ЧИСТРАБДНИ(СЕГОДНЯ(); A2; $D$2:$D$10)
Где $D$2:$D$10 — список праздников (например, 01.01.2026, 07.01.2026 и т.д.).
| Функция | Синтаксис | Пример результата | Учитывает выходные? |
|---|---|---|---|
СЕГОДНЯ() - дата |
=A2-СЕГОДНЯ() |
180 (дни) |
❌ Нет |
ЧИСТРАБДНИ() |
=ЧИСТРАБДНИ(СЕГОДНЯ(); A2) |
126 (рабочие дни) |
✅ Да |
ДНИ() |
=ДНИ(СЕГОДНЯ(); A2) |
180 (аналог вычитания) |
❌ Нет |
Способ 3: Учёт времени (часы, минуты, секунды)
Если вам нужно посчитать не только дни, но и часы/минуты (например, для таймера обратного отсчёта), используйте комбинацию функций СЕГОДНЯ() и ВРЕМЯ(). Формула для получения разницы в днях с дробной частью:
=[Ячейка_с_датой_и_временем] - СЕГОДНЯ()
Пример: Если в ячейке A2 указано 15.05.2026 14:30, а сегодня 10.05.2026 10:00, результат будет 369,1875. Здесь:
369— полные дни;0,1875— доля дня (14:30 = 14.5 часов / 24 ≈ 0.1875).
Чтобы преобразовать дробную часть в часы, умножьте её на 24:
=ЦЕЛОЕ(A2-СЕГОДНЯ()) & " дней, " & ТЕКСТ((A2-СЕГОДНЯ()-ЦЕЛОЕ(A2-СЕГОДНЯ()))*24; "0.00") & " часов"
Результат: 369 дней, 4.50 часов.
Как Excel хранит даты и время?
Excel хранит даты как числа (количество дней с 01.01.1900), а время — как дробную часть (например, 0.5 = 12:00). Поэтому 15.05.2026 14:30 для Excel — это число ~45412.60417.
Способ 4: Расчёт дней между двумя произвольными датами
Если нужно посчитать дни не от сегодняшнего дня, а между двумя любыми датами (например, длительность проекта), используйте функцию ДНИ():
=ДНИ([Конечная_дата]; [Начальная_дата])
Пример: Формула =ДНИ("31.12.2026"; "01.01.2026") вернёт 365 (или 366 для високосного года).
Для учёта рабочих дней между двумя датами снова пригодится ЧИСТРАБДНИ():
=ЧИСТРАБДНИ([Начальная_дата]; [Конечная_дата]; [Праздники])
Ячейки с датами отформатированы как "Дата"|Функция СЕГОДНЯ() не заменена на фиксированную дату|Учтена временная зона (если важно)|Праздники добавлены в третий аргумент ЧИСТРАБДНИ (если нужно)
-->
Способ 5: Автоматическое обновление без пересчёта (фиксированная дата)
По умолчанию функция СЕГОДНЯ() пересчитывается при каждом открытии файла. Если вам нужно зафиксировать текущую дату (например, для отчёта "на момент создания"), используйте один из трюков:
- Горячие клавиши: Выделите ячейку с
=СЕГОДНЯ(), нажмитеF9(превратит формулу в значение), затемEnter. - Копирование как значения: Скопируйте ячейку (
Ctrl+C), затем вставьте какЗначения(Ctrl+Shift+V→Значения). - VBA-макрос: Для автоматизации создайте макрос, который заменяет
СЕГОДНЯ()на статическую дату при сохранении файла.
Критичный нюанс: Если вы зафиксируете дату в отчёте, а затем откроете его через месяц, расчёт дней будет некорректным. Например, если в отчёте от 10.05.2026 зафиксирована дата 10.05.2026, а вы откроете файл 20.05.2026, формула =A2-"10.05.2026" вернёт 10, хотя на самом деле прошло 20 дней.
Типичные ошибки и как их избежать
Даже простые формулы могут давать сбои. Вот TOP-5 ошибок и их решения:
- #ЗНАЧ! при вычитании дат:
Причина: одна из "дат" на самом деле текст (например,
"31.12.2026"вместо31.12.2026). Решение: используйте=ДАТАЗНАЧ(A2). - Неправильный знак результата:
Если формула вернула
-15вместо15, поменяйте местами ячейки:=СЕГОДНЯ()-A2вместо=A2-СЕГОДНЯ(). - Ошибка #ИМЯ?:
Причина: опечатка в названии функции (например,
ЧИСТРАБДНЕЙвместоЧИСТРАБДНИ). - Некорректный учёт високосных лет:
Excel автоматически учитывает високосные года (например, 2026), но если вы вручную вводите даты как текст, могут быть ошибки.
- Проблемы с временными зонами:
Если файл создавался в одном часовом поясе, а открывается в другом,
СЕГОДНЯ()может сбиться на ± несколько часов.
⚠️ Внимание: Функция СЕГОДНЯ() зависит от системных настроек компьютера. Если дата на вашем ПК установлена неправильно, все расчёты будут ошибочными. Проверяйте настройки времени в панели управления!
FAQ: Ответы на частые вопросы
Можно ли посчитать дни между датами в Google Таблицах?
Да, все приведённые формулы работают и в Google Sheets. Единственное отличие — функция ЧИСТРАБДНИ называется NETWORKDAYS (но русская версия тоже поддерживается). Пример:
=NETWORKDAYS(TODAY(); A2)
Как посчитать количество полных недель между датами?
Используйте функцию ЦЕЛОЕ для деления дней на 7:
=ЦЕЛОЕ((A2-СЕГОДНЯ())/7)
Для учёта неполных недель добавьте ОКРУГЛВВЕРХ.
Почему моя формула возвращает ###### вместо числа?
Это означает, что столбец слишком узкий для отображения результата. Растяните его или измените формат ячейки на Общий.
Можно ли посчитать дни с учётом только будних и конкретных праздников?
Да, используйте ЧИСТРАБДНИ.МЕЖД (в новых версиях Excel). Пример:
=ЧИСТРАБДНИ.МЕЖД(СЕГОДНЯ(); A2; 1; $D$2:$D$10)
Где 1 — это суббота и воскресенье как выходные, а $D$2:$D$10 — список праздников.
Как сделать так, чтобы дата не обновлялась при открытии файла?
Замените =СЕГОДНЯ() на фиксированное значение (см. Способ 5). Или используйте VBA-скрипт для автоматической подстановки текущей даты при сохранении:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("Лист1").Range("B2").Value = Date
End Sub