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

Работа с датами в Microsoft Excel — одна из самых востребованных задач при анализе данных. Według статистики, 89% пользователей регулярно сталкиваются с необходимостью вычислить временные интервалы: сроки выполнения проектов, возраст клиентов, продолжительность абонементов или разницу между платежами. Но далеко не все знают, что в Excel есть сразу 5 способов посчитать разницу между двумя датами — от простого вычитания до специализированных функций вроде DATEDIF или РАЗНДАТ.

Проблема в том, что неправильный выбор метода часто приводит к ошибкам: вместо количества дней программа выдаёт бессмысленные числа (например, 44197 вместо 365), а при расчёте месяцев игнорирует годы. В этой статье мы разберём все возможные сценарии — от базовых до продвинутых, включая обработку отрицательных значений и учёт выходных дней. Вы узнаете, как избежать типичных ошибок форматирования и почему функция DATEDIF, несмотря на свою мощь, не документирована в официальной справке Excel.

Для наглядности каждый метод сопровождается пошаговыми скриншотами (в текстовом формате) и примерами формул, которые вы сможете скопировать и адаптировать под свои задачи. А в конце статьи — FAQ-блок с ответами на самые частые вопросы, включая работу с датами до 1900 года и особенности Excel для Mac.

📊 Как часто вы работаете с датами в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

1. Базовый метод: вычитание дат для расчёта дней

Самый простой способ узнать разницу между двумя датами — вычесть одну из другой. Excel автоматически преобразует результат в количество дней, так как хранит даты в виде последовательных чисел (начиная с 1 января 1900 года, которое равно 1). Например, формула =B2-A2 вернёт количество дней между датами в ячейках A2 и B2.

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

  1. Если ячейки не отформатированы как дата, Excel воспримет их как текст и вернёт ошибку #ЗНАЧ!.
  2. Результат по умолчанию отображается в числовом формате (например, 365), но его можно преобразовать в годы/месяцы с помощью Формат ячеек → Числовые форматы.

Пример:

=D2-C2  // Возвращает 45 (дни между 15.05.2023 и 29.06.2023)
⚠️ Внимание: Если в результате вычитания вы видите число вроде 44197, это означает, что ячейки не отформатированы как даты. Исправьте формат через Главная → Формат → Формат ячеек → Дата.

Чтобы результат отображался в более удобном виде (например, "1 год 2 месяца 5 дней"), используйте пользовательский формат:

  1. Выделите ячейку с результатом.
  2. Нажмите Ctrl+1 (или Cmd+1 на Mac).
  3. В поле Тип введите: г" год "м" мес. "д" дн.".

Ячейки отформатированы как "Дата"|Нет пустых значений|Формула начинается со знака "="|Результат отображается в нужном формате-->

2. Функция DATEDIF: расчёт дней, месяцев и лет

Функция DATEDIF (или РАЗНДАТ в русской версии) — самый мощный инструмент для работы с датами, но она не документирована в официальной справке Microsoft. Её синтаксис:

=DATEDIF(начальная_дата; конечная_дата; единица_измерения)

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

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

Примеры использования:

=DATEDIF("15.01.2020"; "20.03.2023"; "y")  // Вернёт 3 (полных года)

=DATEDIF(A2; B2; "md") // Вернёт дни между датами, игнорируя месяцы и годы

Особенность DATEDIF: она учитывает календарную структуру. Например, разница между 31.01.2023 и 01.03.2023 по параметру "m" составит 1 месяц, а не 2, потому что в феврале 28 дней.

⚠️ Внимание: Если начальная дата позже конечной, DATEDIF вернёт ошибку #ЧИСЛО!. Чтобы избежать этого, используйте функцию ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(DATEDIF(A2; B2; "d"); "Дата окончания раньше начальной")
Почему DATEDIF не документирована?

Функция DATEDIF была добавлена в Excel для совместимости с Lotus 1-2-3 — популярной программой 1980-х. Microsoft никогда официально не анонсировала её, но и не удаляла, так как она широко используется в legacy-проектах. В современных версиях Excel (2019+) функцию планировали заменить на DAYS, MONTHS и YEARS, но этого не произошло из-за обратной совместимости.

3. Функции DAYS, MONTHS, YEARS: альтернатива DATEDIF

В Excel 2013 и новее появились специализированные функции для расчёта разницы:

  • 📅 DAYS(конечная_дата; начальная_дата) — возвращает дни;
  • 📆 MONTHS(конечная_дата; начальная_дата) — возвращает полные месяцы;
  • 🗓️ YEARS(конечная_дата; начальная_дата) — возвращает полные годы.

Пример:

=DAYS("31.12.2023"; "01.01.2023")  // Вернёт 364 (дни в 2023 году)

=YEARS(B2; A2) // Вернёт разницу в годах между датами в ячейках

Отличие от DATEDIF:

Функция Учитывает календарь? Работает с отрицательными значениями? Доступна в Excel 2010?
DATEDIF Да Нет (ошибка #ЧИСЛО!) Да
DAYS/MONTHS/YEARS Нет (только арифметика) Да (возвращает отрицательное число) Нет

=DATEDIF(A2; ТДАТА(); "y") & " лет, " & DATEDIF(A2; ТДАТА(); "ym") & " мес., " & DATEDIF(A2; ТДАТА(); "md") & " дн."

где A2 — дата рождения, а ТДАТА() — текущая дата.-->

4. Расчёт рабочих дней (исключая выходные и праздники)

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

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

Пример:

=ЧИСТРАБДНИ("01.01.2023"; "31.01.2023"; {"07.01.2023"})

Эта формула вернёт количество рабочих дней в январе 2023 года, исключая Новый год (1-6 января) и Рождество (7 января).

Если праздников много, удобнее разместить их в отдельном диапазоне (например, D2:D10) и ссылаться на него:

=ЧИСТРАБДНИ(A2; B2; Праздники!D2:D10)
⚠️ Внимание: Функция ЧИСТРАБДНИ.МЕЖД (или NETWORKDAYS.INTL) позволяет настроить выходные дни. Например, для стран, где выходной — пятница и суббота:
=ЧИСТРАБДНИ.МЕЖД(A2; B2; 11; Праздники!D2:D10)

где 11 — код для выходных "пятница-суббота".

5. Ошибки и их решения: #ЗНАЧ!, #ЧИСЛО!, неверный формат

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

  • 🚨 #ЗНАЧ! — одна или обе ячейки содержат текст, а не дату. Решение: проверьте формат ячеек (Формат → Дата) или используйте ДАТАЗНАЧ для преобразования текста в дату:
    =DATEDIF(ДАТАЗНАЧ("01.01.2023"); ДАТАЗНАЧ("31.12.2023"); "d")
  • 🚨 #ЧИСЛО! — начальная дата позже конечной. Решение: поменяйте местами аргументы или используйте АБС:
    =АБС(DATEDIF(A2; B2; "d"))
  • 🚨 1900 годExcel не поддерживает даты до 01.01.1900. Решение: используйте Google Sheets или специализированные надстройки.

Ещё одна распространённая ошибка — неверное отображение результата. Например, вместо "365 дней" вы видите "1.0". Это означает, что ячейка отформатирована как дробное число. Исправьте формат на Общий или Числовой.

=ЕТЕКСТ(A2)  // Вернёт ИСТИНА, если в ячейке текст, а не дата
-->

6. Продвинутые сценарии: динамические даты и условное форматирование

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

  1. Выделите диапазон с датами.
  2. Перейдите в Главная → Условное форматирование → Правила выделения ячеек → Меньше.
  3. Введите =ТДАТА() и выберите цвет (например, красный).

Для расчёта остатка дней до дедлайна используйте:

=B2-ТДАТА()  // Где B2 — дата дедлайна

Чтобы результат не становился отрицательным после просрочки, оберните формулу в МАКС:

=МАКС(0; B2-ТДАТА())

Если нужно посчитать процент выполнения проекта по времени:

=МИН(1; (ТДАТА()-A2)/(B2-A2))

где A2 — дата начала, B2 — дата окончания. Форматируйте ячейку как Процентный.

7. Сравнение методов: какой выбрать?

Выбор метода зависит от задачи:

Задача Рекомендуемый метод Пример формулы
Разница в днях Вычитание или DAYS =B2-A2 или =DAYS(B2; A2)
Разница в годах/месяцах DATEDIF =DATEDIF(A2; B2; "y")
Рабочие дни (без выходных) ЧИСТРАБДНИ =ЧИСТРАБДНИ(A2; B2)
Динамический расчёт (от текущей даты) ТДАТА() + вычитание =ТДАТА()-A2

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

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

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

=DATEDIF(ДАТАЗНАЧ("01.01.2023"); B2; "d")

Если текст в нестандартном формате (например, "1 января 2023"), примените комбинацию ПСТР, НАЙТИ и ДАТА.

🔹 Почему функция DATEDIF возвращает ошибку #ИМЯ?

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

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

Также проверьте регистр: DATEDIF (английская) и РАЗНДАТ (русская) чувствительны к регистру.

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

Умножьте результат вычитания на 24 (часы) или 1440 (минуты):

= (B2-A2)*24  // Часы

= (B2-A2)*1440 // Минуты

Убедитесь, что ячейки с датами включают время (формат дд.мм.гггг чч:мм).

🔹 Работает ли DATEDIF в Excel для Mac?

Да, но в некоторых версиях Excel для Mac (2011 и старше) функция может отсутствовать. Альтернатива — использовать DAYS/MONTHS/YEARS или написать пользовательскую функцию на VBA.

🔹 Как посчитать разницу между датами до 1900 года?

Excel не поддерживает даты до 1900 года, но есть обходные пути:

  1. Используйте Google Sheets (поддерживает даты с 01.01.0001).
  2. Преобразуйте даты в юлианские дни и вычитайте их вручную.
  3. Напишите пользовательскую функцию на VBA или Python (с библиотекой datetime).