Расчёт количества дней между двумя датами — одна из самых востребованных задач в Microsoft Excel. Без этого не обойтись при планировании проектов, расчёте сроков доставки, анализе временных интервалов или даже при составлении личного графика. Казалось бы, что может быть проще: взять и вычесть одну дату из другой? Но на практике пользователи сталкиваются с массой нюансов: как учесть только рабочие дни, исключить праздники, получить результат в месяцах или годах, а не в днях?
В этой статье мы разберём 5 проверенных способов подсчёта дней между датами — от базового вычитания до сложных формул с учётом выходных и праздничных дней. Вы узнаете, как избежать типичных ошибок (например, когда Excel воспринимает даты как текст), как работать с отрицательными значениями и почему иногда результат отличается от ожидаемого на 1 день. А для тех, кто работает с большими массивами данных, мы подготовили таблицу сравнения методов и чек-лист для быстрой проверки формул.
Если вы никогда не работали с датами в Excel, не переживайте: мы начнём с азов и постепенно перейдём к продвинутым техникам. Опытные пользователи тоже найдут здесь полезные лайфхаки — например, как автоматически подсвечивать просроченные задачи или как использовать РАЗНДАТ() для расчёта возраста в годах, месяцах и днях.
1. Базовый метод: простое вычитание дат
Самый очевидный способ — вычесть одну дату из другой. Excel хранит даты в виде последовательных чисел (начиная с 1 января 1900 года, которое равно 1), поэтому арифметические операции с ними работают интуитивно.
Допустим, у вас есть две даты в ячейках A1 (нач. дата) и B1 (кон. дата). Формула будет выглядеть так:
=B1-A1
Результат — количество дней между датами, включая оба конца интервала, если нужно посчитать длительность (например, срок аренды). Если требуется исключить последний день (например, при расчёте просрочки), используйте =B1-A1-1.
⚠️ Внимание: Если одна из ячеек содержит текст (например, дата введена как "01.01.2026" без формата даты), Excel вернёт ошибку #ЗНАЧ!. Чтобы этого избежать, всегда проверяйте формат ячеек: выделите их, нажмите Ctrl+1 и выберите категорию "Дата".
Этот метод подходит для большинства задач, но имеет ограничения:
- 📅 Не учитывает рабочие/выходные дни.
- 🔄 Не работает с отрицательными значениями (если начальная дата позже конечной).
- 📊 Не позволяет получить результат в месяцах или годах.
2. Функция ДАТАРАЗН(): универсальный инструмент
Функция ДАТАРАЗН() (англ. DATEDIF) — скрытая жемчужина Excel. Она не отображается в списке функций при вводе через мастер, но работает во всех версиях программы, включая Excel 365 и Excel 2019. Её главный плюс — гибкость: можно получить разницу в днях, месяцах или годах.
Синтаксис:
=ДАТАРАЗН(нач_дата; кон_дата; единица_измерения)
Где единица_измерения может принимать значения:
- "d" — дни;
- "m" — полные месяцы;
- "y" — полные годы;
- "ym" — месяцы без учёта лет;
- "yd" — дни без учёта годов;
- "md" — дни без учёта месяцев и лет.
Пример: чтобы узнать, сколько полных лет и месяцев прошло с 15 марта 2020 года по сегодняшний день (в ячейке A1 текущая дата):
=ДАТАРАЗН("15.03.2020"; A1; "y") & " лет и " & ДАТАРАЗН("15.03.2020"; A1; "ym") & " месяцев"
⚠️ Внимание: Функция ДАТАРАЗН() округляет результаты вниз. Например, если разница между датами 366 дней, ДАТАРАЗН(..., "y") вернёт 1 год, даже если фактически прошёл 1 год и 1 день. Для точного расчёта комбинируйте единицы измерения.
| Единица измерения | Пример формулы | Результат для интервала 01.01.2023 — 15.03.2026 |
|---|---|---|
"d" |
=ДАТАРАЗН("01.01.2023"; "15.03.2026"; "d") |
439 дней |
"m" |
=ДАТАРАЗН("01.01.2023"; "15.03.2026"; "m") |
14 месяцев |
"y" |
=ДАТАРАЗН("01.01.2023"; "15.03.2026"; "y") |
1 год |
"ym" |
=ДАТАРАЗН("01.01.2023"; "15.03.2026"; "ym") |
2 месяца |
3. Функция РАЗНДАТ(): альтернатива для новых версий Excel
В Excel 2013 и новее появилась функция РАЗНДАТ() (англ. DAYS), которая упрощает подсчёт дней между датами. Её синтаксис проще, чем у ДАТАРАЗН(), но и возможностей меньше:
=РАЗНДАТ(нач_дата; кон_дата)
Пример: если в ячейке A2 дата начала проекта (10.05.2026), а в B2 — дедлайн (20.06.2026), формула вернёт 41 день:
=РАЗНДАТ(A2; B2)
✅ Плюсы:
- 🔍 Проще в использовании — не нужно запоминать коды единиц измерения.
- 📈 Работает быстрее на больших массивах данных.
❌ Минусы:
- 🚫 Не поддерживает месяцы и годы — только дни.
- 🔄 Не работает в Excel 2010 и старше.
4. Учёт рабочих дней: функции ЧИСТРАБДНИ() и РАБДЕНЬ()
Если вам нужно посчитать только рабочие дни (исключая субботу, воскресенье и праздники), используйте:
ЧИСТРАБДНИ()(англ.NETWORKDAYS) — возвращает количество рабочих дней между датами.РАБДЕНЬ()(англ.WORKDAY) — добавляет рабочие дни к дате (полезно для расчёта дедлайнов).
Синтаксис ЧИСТРАБДНИ():
=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])
Аргумент [праздники] — необязательный диапазон ячеек с датами праздников. Например, если в ячейках D1:D5 перечислены праздники (01.01.2026, 07.01.2026 и т.д.), формула будет:
=ЧИСТРАБДНИ(A1; B1; D1:D5)
💡 Пример из практики: Допустим, вы отправляете заказ 10 мая 2026 года, а срок доставки — 14 рабочих дней. Чтобы узнать дату получения с учётом выходных:
=РАБДЕНЬ("10.05.2026"; 14)
Результат: 31 мая 2026 года (если не учитывать праздники).
⚠️ Внимание: По умолчанию ЧИСТРАБДНИ() считает субботу и воскресенье выходными. Если у вас другой график (например, рабочая суббота), используйте ЧИСТРАБДНИ.МЕЖД() (англ. NETWORKDAYS.INTL), где можно задать свои выходные дни через коды (например, 11 — выходной только воскресенье).
Ячейки с датами отформатированы как даты|Праздники указаны в отдельном диапазоне|Учтён региональный календарь выходных|Проверен результат на отрицательные значения-->
5. Расчёт дней с учётом времени (даты + время)
Если ваши даты включают не только день, но и время (например, 15.05.2026 14:30), простое вычитание даст результат в днях и их долях. Чтобы преобразовать это в часы, минуты или секунды, умножьте результат на:
- 🕒
24— для часов; - 🕒
24*60 = 1440— для минут; - 🕒
24*60*60 = 86400— для секунд.
Пример: в ячейке A1 — 15.05.2026 09:00, в B1 — 16.05.2026 17:30. Формула для расчёта часов:
=(B1-A1)*24
Результат: 32,5 часа.
Для округления до целых часов используйте ОКРУГЛ():
=ОКРУГЛ((B1-A1)*24; 0)
🔹 Нюанс: Если вам нужно посчитать только полные дни (игнорируя время), используйте ЦЕЛОЕ():
=ЦЕЛОЕ(B1-A1)
6. Типичные ошибки и как их избежать
Даже опытные пользователи иногда сталкиваются с неожиданными результатами при работе с датами. Вот самые распространённые проблемы и их решения:
🔴 Ошибка #ЗНАЧ!:
- 📌 Причина: Одна из ячеек содержит текст вместо даты.
- 🔧 Решение: Проверьте формат ячеек (
Ctrl+1) или используйтеДАТАЗНАЧ()для преобразования текста в дату:=ДАТАЗНАЧ("01.01.2026")
🔴 Некорректный результат (на 1 день больше/меньше):
- 📌 Причина: Excel учитывает или не учитывает последний день интервала.
- 🔧 Решение: Явно укажите, включать ли конец интервала:
=B1-A1 // включает оба дня=B1-A1-1 // исключает последний день
🔴 Отрицательное значение:
- 📌 Причина: Начальная дата позже конечной.
- 🔧 Решение: Используйте
АБС()для модуля или поменяйте даты местами:=АБС(B1-A1)
Критическая ошибка: если вы работаете с датами до 1900 года (например, исторические данные), Excel их не распознаёт. В этом случае используйте текстовый формат или специализированные надстройки.
Excel наследует ошибку из Lotus 1-2-3, где 1900 год ошибочно считался високосным. Это приводит к смещению на 1 день при расчётах с датами до 1 марта 1900 года. Чтобы избежать проблемы, используйте даты начиная с 1900 года или корректируйте результат вручную.Почему Excel считает 1900 год високосным (ошибка в 1 день)?
FAQ: Ответы на частые вопросы
Можно ли посчитать дни между датами в Google Таблицах?
Да, все описанные функции работают и в Google Sheets, за исключением ДАТАРАЗН() — её аналогом является =DATEDIF() (с тем же синтаксисом). Также в Google Таблицах есть функция =DAYS() (аналог РАЗНДАТ()).
Как посчитать количество месяцев между датами с учётом дней?
Используйте комбинацию функций:
=ДАТАРАЗН(A1; B1; "y")*12 + ДАТАРАЗН(A1; B1; "ym")
Для точного результата с учётом дней добавьте:
=ДАТАРАЗН(A1; B1; "y")*12 + ДАТАРАЗН(A1; B1; "ym") & " мес. и " & ДАТАРАЗН(A1; B1; "md") & " дн."
Почему моя формула возвращает ###### вместо результата?
Это означает, что столбец слишком узкий для отображения результата. Расширьте столбец или измените формат ячейки на "Общий". Также проверьте, не является ли результат отрицательным числом с большим количеством знаков.
Как автоматически обновлять текущую дату в формулах?
Используйте функцию =СЕГОДНЯ() (англ. TODAY()). Она возвращает текущую дату и обновляется при каждом открытии файла. Пример:
=РАЗНДАТ(A1; СЕГОДНЯ())
⚠️ Внимание: Эта функция не обновляется в реальном времени — только при пересчёте листа (F9) или открытии файла.
Можно ли посчитать дни между датами в Power Query?
Да, в Power Query (вкладка Данные → Получение данных) можно создать пользовательский столбец с формулой на языке M:
= Duration.Days([EndDate] - [StartDate])
Это полезно для обработки больших наборов данных без использования формул в ячейках.