Сколько дней прошло между двумя датами в Excel: формулы, примеры и ловушки

Формула =DATEDIF(А2;B2;"d") вернет ошибку #ИМЯ?, если вы используете русскоязычную версию Excel с запятыми в качестве разделителей. Это классическая проблема при попытке посчитать дни между датами — функция РАЗНДАТ (русский аналог DATEDIF) требует точек с запятой, а не запятых. Даже при корректном синтаксисе результат может искажаться из-за неверного формата ячеек: если даты хранятся как текст (например, "31.12.2023" вместо серийного числа), Excel воспримет их как ноль.

Проблема усложняется, когда нужно исключить выходные или праздники, учесть только рабочие дни или получить разницу в месяцах/годах. Стандартное вычитание (=B2-A2) даст правильный результат только при идеальных условиях: обе ячейки отформатированы как даты, а регион листа совпадает с языком формул. В 30% случаев пользователи получают неверные данные из-за скрытых символов (пробелов, неразрывных дефисов) или региональных настроек Windows, которые переопределяют формат даты по умолчанию.

Почему простое вычитание дат в Excel дает сбой

Основная ловушка — Excel хранит даты как числа, где 1 соответствует 1 января 1900 года (в Windows) или 1904 году (на Mac). Когда вы вводите 15.05.2026 в ячейку, программа преобразует это в серийный номер (например, 45415). Если ячейка отформатирована как текст, Excel увидит строку и не сможет выполнить арифметические операции. Это приводит к двум типичным ошибкам:

  • 🔢 Результат 0 или #ЗНАЧ! — даты воспринимаются как текстовые значения.
  • 📅 Неверная разница в 4 года — из-за конфликта систем дат 1900/1904 (актуально при переносе файлов между ПК и Mac).
  • ⚠️ Отрицательное число — конечная дата раньше начальной, но Excel не выдает ошибку.

Проверить формат ячейки можно через контекстное меню: Формат ячеек → Число → Дата. Если там выбрано "Текстовый", исправьте на любой датовый формат. Для массового исправления используйте функцию =ДАТАЗНАЧ(A2), которая преобразует текст в дату. Например:

=ДАТАЗНАЧ("31.12.2023")  → вернет серийный номер 45267
⚠️ Внимание: Функция ДАТАЗНАЧ не работает с датами до 1900 года и требует точного соответствия формату региональных настроек. Если ваш Excel настроен на английский (США), вводите даты как "12/31/2023".

5 способов посчитать дни между датами (с примерами)

Выбор метода зависит от задачи: нужно ли учитывать выходные, требуется ли разница в календарных или рабочих днях, важна ли точность до минут. Ниже — сравнение способов от самого простого к продвинутому.

Метод Формула Когда использовать Ограничения
Простое вычитание =B2-A2 Календарные дни между двумя датами Не учитывает формат ячеек
Функция РАЗНДАТ =РАЗНДАТ(A2;B2;"d") Точный расчет дней, месяцев, лет Скрытая функция, нет подсказок
Функция ЧИСТРАБДНИ =ЧИСТРАБДНИ(A2;B2) Только рабочие дни (пн-пт) Игнорирует праздники
Вычитание + ЦЕЛОЕ =ЦЕЛОЕ(B2-A2) Дни без учета времени Округляет вниз
Power Query Запрос → Добавление столбца Массовая обработка дат Требует навыков работы с Power Query

Для большинства задач достаточно комбинации =РАЗНДАТ и условного форматирования. Например, чтобы подсветить просроченные задачи:

=ЕСЛИ(РАЗНДАТ(СЕГОДНЯ();A2;"d")<0; "Просрочено"; "Актуально")
📊 Какой метод вы используете чаще?
Простое вычитание
Функцию РАЗНДАТ
ЧИСТРАБДНИ для рабочих дней
Power Query

Функция РАЗНДАТ: скрытые возможности и ошибки

Функция РАЗНДАТ (DATEDIF) — единственный инструмент в Excel, который умеет считать разницу в годах, месяцах и днях одновременно. Ее синтаксис:

=РАЗНДАТ(нач_дата; кон_дата; единица)

Где единица может принимать значения:

  • 📅 "d" — дни между датами.
  • 📆 "m" — полные месяцы.
  • 🗓️ "y" — полные годы.
  • 🔄 "ym" — месяцы без учета лет.
  • 📅 "md" — дни без учета месяцев и лет.
  • 📊 "yd" — дни без учета годов.

Пример: чтобы узнать, сколько лет, месяцев и дней прошло с 15 мая 2020 по сегодня:

=РАЗНДАТ("15.05.2020";СЕГОДНЯ();"y") & " лет, " &

РАЗНДАТ("15.05.2020";СЕГОДНЯ();"ym") & " мес., " &

РАЗНДАТ("15.05.2020";СЕГОДНЯ();"md") & " дней"

⚠️ Внимание: Функция РАЗНДАТ не документирована в официальной справке Excel, но работает во всех версиях с 2000 года. В Excel 365 она может выдавать #ЧИСЛО!, если начальная дата позже конечной — используйте =АБС(РАЗНДАТ(...)) для абсолютного значения.
Почему РАЗНДАТ иногда возвращает неточные месяцы?

Функция считает полные месяцы. Например, разница между 31.01 и 28.02 будет 0 месяцев, несмотря на 28 дней. Для точного расчета в днях используйте "d" или комбинируйте с "md".

//

Как исключить выходные и праздники из расчета

Для подсчета только рабочих дней используйте функцию ЧИСТРАБДНИ:

=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])

Где [праздники] — необязательный диапазон с датами праздников. Пример: чтобы посчитать рабочие дни между 1 и 31 мая 2026, исключив 1, 9 мая и выходные:

  1. Создайте список праздников в отдельном диапазоне (например, D2:D4 с датами 01.05.2026 и 09.05.2026).
  2. Введите формулу:
    =ЧИСТРАБДНИ("01.05.2026";"31.05.2026";D2:D4)

Для гибкого учета региональных праздников (например, переносимых выходных) используйте комбинацию ЧИСТРАБДНИ и ЕСЛИ:

=ЧИСТРАБДНИ(A2;B2;ЕСЛИ(МЕСЯЦ(D2:D10)=5;D2:D10;""))

✅ Даты в ячейках A2 и B2 отформатированы как даты

✅ Диапазон праздников (D2:D10) содержит только даты, без текста

✅ Учтена разница часовых поясов, если даты из разных источников

✅ Формула обернута в ЕСЛИОШИБКА для обработки ошибок

Расчет дней с учетом времени (часов и минут)

Если даты содержат время (например, 15.05.2026 14:30), простое вычитание вернет дробное число, где целая часть — дни, а дробная — доля суток. Чтобы разделить дни и часы:

  • 🕒 Дни: =ЦЕЛОЕ(B2-A2)
  • ⏱️ Часы: =ОСТАТ((B2-A2)*24;24)
  • Минуты: =ОСТАТ((B2-A2)*1440;60)

Пример: если в A215.05.2026 09:00, а в B217.05.2026 17:30, формулы вернут:

  • Дни: 2
  • Часы: 8 (остаток от 2.35 суток)
  • Минуты: 30

Для вывода результата в формате 2 дня 8 часов 30 минут используйте:

=ЦЕЛОЕ(B2-A2)&" дн. "&ОСТАТ(ЦЕЛОЕ((B2-A2)*24);24)&" ч. "&ОСТАТ(ЦЕЛОЕ((B2-A2)*1440);60)&" мин."

Ошибки и их исправление: таблица диагностики

90% проблем при расчете дней между датами связаны с тремя причинами: неверный формат ячеек, региональные настройки или скрытые символы. Ниже — таблица для быстрой диагностики:

Ошибка Причина Решение
#ЗНАЧ! Ячейка содержит текст вместо даты Используйте =ДАТАЗНАЧ(A2) или измените формат ячейки
#ИМЯ? Опечатка в названии функции (например, РАЗНДАТА вместо РАЗНДАТ) Проверьте синтаксис: =РАЗНДАТ(A2;B2;"d")
Результат на 4 года больше Конфликт систем дат 1900/1904 (Mac vs Windows) Проверьте Файл → Параметры → Дополнительно → При переходе на эту книгу: 1900
Отрицательное число Конечная дата раньше начальной Используйте =АБС(B2-A2) или поменяйте даты местами
Неверный месяц в РАЗНДАТ Функция считает полные месяцы (31.01–28.02 = 0 мес.) Для точного расчета используйте "d" и делите на 30

Если ошибка сохраняется, проверьте региональные настройки Windows:

  1. Откройте Панель управления → Часы и регион → Изменение форматов даты, времени и чисел.
  2. Убедитесь, что короткий формат даты соответствует вводимым данным (например, дд.ММ.гггг для 31.12.2026).

Продвинутые сценарии: динамические даты и Power Query

Для автоматизации расчетов с изменяющимися датами (например, "дни до дедлайна") используйте комбинацию СЕГОДНЯ() и условного форматирования. Пример: подсветка ячеек, где до конца проекта осталось меньше 5 дней:

=ЕСЛИ(РАЗНДАТ(СЕГОДНЯ();B2;"d")<5;"Срочно!";"")

Для обработки больших наборов данных (например, логов с датами) эффективнее использовать Power Query:

  1. Выделите диапазон с датами → Данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте столбец: Добавить столбец → Дата и время → Разница дней.
  3. Выберите начальную и конечную даты → подтвердите.

Преимущество Power Query — обработка миллионов строк без замедления Excel. Например, для анализа времени выполнения задач:

// Код M для Power Query

let

Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],

ДобавленСтолбец = Table.AddColumn(Источник, "Дней на задачу", each Duration.Days([Дата окончания] - [Дата начала]))

in

ДобавленСтолбец

FAQ: Частые вопросы о расчете дней в Excel

Можно ли посчитать дни между датами в разных файлах Excel?

Да, но нужно использовать ссылки на внешние книги. Пример:

=РАЗНДАТ([Book2.xlsx]Лист1!$A$1;B2;"d")

Убедитесь, что оба файла открыты, иначе ссылка обновится только при следующем открытии. Для динамической работы сохраните файлы в одной папке и используйте абсолютные пути.

Как посчитать дни между сегодняшней датой и датой в ячейке?

Используйте функцию СЕГОДНЯ():

=РАЗНДАТ(СЕГОДНЯ();A2;"d")  // Дней до даты в A2

=СЕГОДНЯ()-A2 // Если A2 — прошедшая дата

Чтобы обновить результат при каждом открытии файла, включите автоматический пересчет: Формулы → Параметры вычислений → Автоматически.

Почему РАЗНДАТ возвращает #ЧИСЛО! даже при корректных датах?

Это происходит в двух случаях:

  1. Начальная дата позже конечной (используйте АБС).
  2. Одна из дат — недопустимое значение (например, 31.02.2026). Проверьте даты на валидность через =ДАТАМЕС(A2;1) — если результат ошибочный, дата некорректна.
Как посчитать количество полных недель между датами?

Используйте комбинацию РАЗНДАТ и деления:

=ЦЕЛОЕ(РАЗНДАТ(A2;B2;"d")/7)

Для учета неполных недель (например, 8 дней = 1 неделя и 1 день):

=ЦЕЛОЕ(РАЗНДАТ(A2;B2;"d")/7) & " нед. и " & ОСТАТ(РАЗНДАТ(A2;B2;"d");7) & " дн."
Можно ли в Excel посчитать дни между датами с учетом часовых поясов?

Excel не поддерживает часовые пояса напрямую. Решения:

  • 🌍 Преобразуйте все даты к UTC перед расчетом (например, =A2 - (3/24) для Москвы зимой, где UTC+3).
  • ⏰ Используйте ВРЕМЯ() для корректировки: =B2-A2+ВРЕМЯ(3;0;0) (добавляет 3 часа к разнице).
  • 📊 Для сложных сценариев экспортируйте данные в Power BI, где есть поддержка часовых поясов.