Как рассчитать количество дней между двумя датами в Excel: от базовых формул до продвинутых трюков

Введение: почему расчёт дней в Excel — это не так просто, как кажется

На первый взгляд, подсчёт количества дней между двумя датами в Microsoft Excel или Google Таблицах кажется элементарной задачей. Введите две даты, вычтите одну из другой — и готово! Но на практике пользователи сталкиваются с десятками подводных камней: от ошибок формата ячеек до некорректного учёта выходных или високосных годов. Например, почему формула =B2-A2 иногда возвращает странное число вроде 44567 вместо ожидаемых 30 дней? Или как правильно посчитать рабочие дни, исключив субботы, воскресенья и праздники?

Эта статья не просто перечислит формулы — она научит вас понимать логику работы с датами в Excel. Мы разберём:

  • 🔹 Базовые методы вычитания дат (включая скрытые нюансы форматирования).
  • 🔹 Продвинутые функции вроде ДНИ, РАЗНДАТ и ЧИСТРАБДНИ.
  • 🔹 Типичные ошибки, из-за которых Excel "врёт" с результатами.
  • 🔹 Автоматизацию для массовых расчётов (например, для HR-отчётов или проектных планов).

Особое внимание уделим разнице между "календарными" и "рабочими" днями — это критично для бухгалтеров, менеджеров проектов и всех, кто работает с дедлайнами. Готовы? Начнём с самого простого — и постепенно дойдём до профессиональных приёмов.

📊 Как часто вам приходится считать дни между датами в Excel?
Ежедневно
Несколько раз в неделю
Редко, но метко
Никогда не пользовался

Способ 1: простое вычитание дат (и почему оно ломается)

Самый очевидный способ — вычесть одну дату из другой. Например, если в ячейке A2 у вас дата начала проекта (15.05.2026), а в B2 — дата окончания (30.05.2026), формула будет:

=B2-A2

Но здесь кроются три подводных камня:

  1. Формат ячеек. Если Excel показывает результат вроде 44678 вместо 15, значит, ячейка с результатом имеет формат Общий, а не Числовой или Дата. Исправляем: выделяем ячейку → правая кнопка → Формат ячеек → выбираем Числовой.
  2. Текст вместо даты. Если дата введена как текст (например, '15.05.2026 с апострофом), Excel не распознаёт её как дату. Проверяйте выравнивание: даты по умолчанию выравниваются по правому краю, текст — по левому.
  3. Отрицательные значения. Если первая дата позже второй, результат будет отрицательным. Чтобы избежать этого, используйте =АБС(B2-A2).

Ячейки с датами имеют формат "Дата"|Результат вычитания отформатирован как "Числовой"|Нет апострофов перед датами (проверьте выравнивание)|Первая дата не позже второй (или используйте АБС)

-->

⚠️ Внимание: Если вы копируете даты из внешних источников (например, с сайтов), они могут содержать невидимые символы. Используйте функцию =ДАТАЗНАЧ(A2), чтобы преобразовать текст в дату:

=ДАТАЗНАЧ("15.05.2026")

Способ 2: функция ДНИ — когда простота важнее гибкости

Функция =ДНИ(конечная_дата; начальная_дата) создана специально для подсчёта дней между двумя датами. Её главный плюс — не нужно запоминать порядок вычитания. Синтаксис:

=ДНИ(B2; A2)

Преимущества перед простым вычитанием:

  • 📌 Читаемость: формула самоокупаема — сразу понятно, что она делает.
  • 📌 Автоматическое игнорирование времени. Если в ячейках указано время (например, 15.05.2026 14:30), ДНИ проигнорирует его, а простое вычитание учтёт.
  • 📌 Поддержка ссылок на ячейки и прямых значений:
    =ДНИ("30.05.2026"; "15.05.2026")  → вернёт 15

⚠️ Внимание: Функция ДНИ появилась только в Excel 2013. Если вы работаете со старой версией (2010 или ранее), используйте =B2-A2 с проверкой формата.

Способ 3: РАЗНДАТ — универсальный инструмент для дней, месяцев и лет

Функция =РАЗНДАТ(нач_дата; кон_дата; единица) — это швейцарский нож для работы с интервалами. Она умеет считать не только дни, но и месяцы, годы. Синтаксис для дней:

=РАЗНДАТ(A2; B2; "d")

Ключевые особенности:

  • 🔧 Единицы измерения:
    АргументЧто считаетПример результата
    "d"Дни15
    "m"Полные месяцы0 (если разница меньше месяца)
    "y"Полные годы1 (если разница > 365 дней)
    "ym"Месяцы без учёта лет2 (если разница 1 год и 2 месяца)
    "md"Дни без учёта месяцев и лет5 (если разница 1 месяц и 5 дней)
  • 🔧 Учёт високосных годов. В отличие от ручного вычитания, РАЗНДАТ корректно обрабатывает 29 февраля.
  • 🔧 Отрицательные результаты. Если конечная дата раньше начальной, функция вернёт ошибку #ЧИСЛО!. Используйте =АБС(РАЗНДАТ(...)).

Пример расчёта возраста в годах, месяцах и днях:

=РАЗНДАТ(A2; СЕГОДНЯ(); "y") & " лет, " & РАЗНДАТ(A2; СЕГОДНЯ(); "ym") & " мес., " & РАЗНДАТ(A2; СЕГОДНЯ(); "md") & " дн."
Почему РАЗНДАТ не документирована в Excel?

Функция РАЗНДАТ — это "наследство" от Lotus 1-2-3, конкурента Excel в 1980-х. Microsoft сохранила её для совместимости, но никогда официально не включала в справочную систему. Несмотря на это, функция работает во всех версиях Excel и считается надёжной.

Способ 4: ЧИСТРАБДНИ — как исключить выходные и праздники

Для расчёта рабочих дней (исключая субботы, воскресенья и праздники) используйте:

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

Пример: подсчёт рабочих дней между 15.05.2026 и 30.05.2026 с учётом Дня Победы (9 мая) и Праздника Весны и Труда (1 мая):

=ЧИСТРАБДНИ("15.05.2026"; "30.05.2026"; {"01.05.2026"; "09.05.2026"})

Нюансы:

  • 📅 Формат праздников. Даты должны быть введены как массив (в фигурных скобках) или как диапазон ячеек (например, D2:D10).
  • 📅 Региональные особенности. В некоторых странах выходные — пятница и суббота. Для таких случаев есть функция =ЧИСТРАБДНИ.МЕЖД (начиная с Excel 2010), где можно указать выходные дни.
  • 📅 Ошибка #ЗНАЧ! возникает, если аргумент [праздники] пуст, но указаны фигурные скобки. Просто удалите их.

Способ 5: динамические расчёты с функциями СЕГОДНЯ и ТДАТА

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

=ДНИ("30.06.2026"; СЕГОДНЯ())  → дней до конца квартала

Для точного времени (включая часы и минуты) подойдёт =ТДАТА():

=ТДАТА() - A2  → разница в днях и времени

⚠️ Внимание: Функции СЕГОДНЯ и ТДАТА не обновляются вручную. Чтобы принудительно пересчитать, нажмите F9 или перейдите в Формулы → Вычислить сейчас. Это важно, если вы работаете с файлом, открытым длительное время.

Пример использования для контроля просрочек:

=ЕСЛИ(СЕГОДНЯ()>A2; "Просрочено на " & СЕГОДНЯ()-A2 & " дней"; "Осталось " & A2-СЕГОДНЯ() & " дней")

Типичные ошибки и как их избежать

Даже опытные пользователи Excel допускают ошибки при работе с датами. Вот топ-5 проблем и их решения:

  1. Ошибка #ЗНАЧ! при вычитании

    Причина: одна или обе "даты" на самом деле — текст. Решение: используйте =ДАТАЗНАЧ() или проверьте формат ячеек.

  2. Неправильный результат в високосный год

    Причина: ручное вычитание не учитывает 29 февраля. Решение: используйте РАЗНДАТ или ДНИ.

  3. Формула не обновляется

    Причина: отключён автоматический пересчёт. Решение: Формулы → Параметры вычислений → Автоматически.

  4. Отрицательные дни в ЧИСТРАБДНИ

    Причина: перепутаны начальная и конечная даты. Решение: поменяйте их местами или используйте АБС.

  5. Дробные дни

    Причина: в ячейках указано время. Решение: используйте ДНИ или ЦЕЛОЕ(B2-A2).

💡 Полезный совет: Чтобы проверить, распознаёт ли Excel ячейку как дату, используйте функцию =ТИП(A2). Если результат 1 — это число (даты в Excel хранятся как числа), если 2 — текст.

Продвинутые трюки: массивы, Power Query и VBA

Если вам нужно обработать сотни строк с датами или создать сложную логику (например, учитывать только будни с 9:00 до 18:00), базовых функций недостаточно. Рассмотрим три продвинутых подхода:

  1. Формулы массива

    Пример: подсчёт дней между датами в столбце A и сегодняшней датой для всего диапазона:

    =СЕГОДНЯ()-A2:A100

    Введите формулу и нажмите Ctrl+Shift+Enter (в новых версиях Excel работает без этого).

  2. Power Query

    Идеален для импорта данных с датами из внешних источников (например, или SQL). В Power Query можно:

    • 🔄 Преобразовать текстовые даты в формат Excel.
    • 🔄 Добавить столбец с разницей в днях.
    • 🔄 Фильтровать данные по диапазону дат.

Путь: Данные → Получить данные → Из таблицы/диапазона.

  • VBA-скрипты

    Для полностью автоматизированных отчётов. Пример кода для подсчёта рабочих дней с учётом региональных праздников:

    Function CustomWorkDays(startDate As Date, endDate As Date) As Long
    

    Dim holidays As Variant

    holidays = Array("01.01.2026", "07.01.2026", "23.02.2026") ' Массив праздников

    CustomWorkDays = Application.WorksheetFunction.NetWorkdays(startDate, endDate, holidays)

    End Function

  • Как ускорить расчёты с датами в больших таблицах?

    Если ваша таблица содержит >10 000 строк с формулами дат, отключите автоматический пересчёт: Формулы → Параметры вычислений → Вручную. Обновляйте данные только при необходимости (кнопка F9).

    FAQ: ответы на частые вопросы

    🔍 Как посчитать дни между датами, если они в разных листах?

    Используйте ссылки на листы. Например, если начальная дата на Лист1 в ячейке A2, а конечная — на Лист2 в B2, формула будет:

    =ДНИ(Лист2!B2; Лист1!A2)

    Убедитесь, что в именах листов нет пробелов или специальных символов.

    🔍 Почему Excel показывает ###### вместо даты?

    Это означает, что ячейка слишком узкая для отображения даты. Растяните столбец или измените формат на более компактный (например, 15.05.24 вместо 15 мая 2026 г.).

    🔍 Можно ли посчитать дни между датой и временем?

    Да, но результат будет в дробном формате (например, 1,5 — полтора дня). Чтобы разделить дни и часы, используйте:

    =ЦЕЛОЕ(B2-A2) & " дней и " & ТЕКСТ((B2-A2)-ЦЕЛОЕ(B2-A2); "ч:мм")
    🔍 Как посчитать количество недель между датами?

    Делите разницу в днях на 7:

    =ОКРУГЛВНИЗ(ДНИ(B2; A2)/7; 0)  → полные недели
    

    =ДНИ(B2; A2)/7 → точное значение (например, 2,3 недели)

    🔍 Работает ли это в Google Таблицах?

    Да, все описанные функции (ДНИ, РАЗНДАТ, ЧИСТРАБДНИ) поддерживаются в Google Sheets, но:

    • Функция РАЗНДАТ называется =DATEDIF.
    • Для ЧИСТРАБДНИ используйте =NETWORKDAYS.
    • Формат дат может отличаться (например, MM/DD/YYYY вместо DD.MM.YYYY).