Разница между датами в Excel: формулы для дней, месяцев и лет

Работа с датами в Microsoft Excel — одна из самых востребованных задач при анализе данных. Бухгалтерам нужно рассчитывать просрочки платежей, HR-специалистам — стаж сотрудников, а логистам — сроки доставки. Но даже простая на первый взгляд операция — найти разницу между двумя датами — таит подводные камни: ошибки формата, неверные результаты при вычитании или проблемы с учётом високосных годов.

В этой статье вы узнаете 5 проверенных способов посчитать разницу между датами в Excel — от элементарного вычитания до скрытой функции РАЗНДАТ (она же DATEDIF), которую не найдёшь в списке мастер-функций. Мы разберём, как получить результат в днях, месяцах или полных годах, а также научимся обрабатывать ошибки типа #ЗНАЧ! и #ЧИСЛО!.

Если вы когда-нибудь получали странные числа вместо дат (например, 44197 вместо 01.01.2021), то после прочтения поймёте, почему так происходит и как это исправить. А для тех, кто работает с большими массивами данных, мы подготовили уникальный приём с функцией ДАТАМЕС для динамического расчёта разницы в месяцах без ошибок.

Почему простая разница дат в Excel работает не так, как вы ожидаете

Начнём с парадокса: в Excel нет специальной функции "РазницаДаты". Когда пользователи пытаются вычесть одну дату из другой (=B2-A2), программа возвращает число — и это нормально. Дело в том, что Excel хранит даты как порядковые номера, где 1 соответствует 1 января 1900 года. Например:

  • 📅 01.01.2020 = 43831
  • 📅 31.12.2023 = 45266
  • 📅 Разница = 1435 дней (а не "3 года и 364 дня")

Проблема в том, что такой результат часто бесполезен. Вам ведь нужны не абстрактные дни, а точные годы, месяцы или рабочие дни с учётом выходных? К тому же, если ячейки имеют текстовый формат (а не Дата), Excel вернёт ошибку #ЗНАЧ! вместо числа.

⚠️ Внимание: Если после вычитания дат вы видите число вроде 4492, но в ячейке отображается 12.01.1912 — проверьте формат. Кликните правой кнопкой по ячейке → Формат ячеек → выберите Общий или Числовой.

Ещё одна ловушка — високосные годы. Функция =Б2-А2 корректно учитывает 29 февраля, но если вам нужны полные годы (например, для расчёта стажа), придётся использовать РАЗНДАТ с параметром "y".

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

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

Если вам нужна разница только в днях, достаточно вычесть одну дату из другой:

=Конечная_дата - Начальная_дата

Например, для ячеек A2 (01.05.2023) и B2 (15.05.2023) формула будет:

=B2-A2

Результат: 14 (дней).

Этот метод идеален для расчёта:

  • 📦 Сроков доставки товара
  • ⏳ Просрочки платежей
  • 📅 Длительности проектов

Но есть нюансы:

  1. Если начальная дата позже конечной, результат будет отрицательным (например, -5).
  2. Если ячейки содержат время (например, 01.01.2023 14:30), разница будет в долях дня (например, 14,52 = 14 дней и 12.5 часов).
⚠️ Внимание: Если вы копируете даты из внешних источников (например, с сайта), Excel может воспринять их как текст. Используйте =ДАТАЗНАЧ(текст), чтобы преобразовать в дату: =ДАТАЗНАЧ("01.01.2023").

☑️ Проверка перед вычитанием дат

Выполнено: 0 / 4

Способ 2: Функция РАЗНДАТ (DATEDIF) — скрытый инструмент для годов, месяцев и дней

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

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

Где единицы — это код возвращаемого значения:

  • "d" — разница в днях
  • "m" — разница в полных месяцах
  • "y" — разница в полных годах
  • "ym" — разница в месяцах без учёта годов (например, между 01.01.2023 и 15.03.2023 вернёт 2)
  • "md" — разница в днях без учёта месяцев и годов (между 01.01.2023 и 15.01.2023 вернёт 14)
  • "yd" — разница в днях без учёта годов

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

ФормулаНачальная датаКонечная датаРезультатПояснение
=РАЗНДАТ(A2;B2;"d")01.01.202031.12.20231460Дней между датами (включая 29.02.2020)
=РАЗНДАТ(A2;B2;"y")15.06.202110.05.20262Полных лет (не учитывает 11 месяцев)
=РАЗНДАТ(A2;B2;"ym")01.01.202315.03.20232Месяцев без учёта годов
=РАЗНДАТ(A2;B2;"md")10.05.202325.05.202315Дней без учёта месяцев

Важный момент: РАЗНДАТ всегда округляет вниз. Например, разница между 31.12.2023 и 01.01.2026 при единице "y" будет 0 (хотя прошёл 1 день). Чтобы получить точный возраст в годах с учётом месяцев, комбинируйте параметры:

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

Результат: "2 лет, 11 мес., 15 дн."

Способ 3: Рабочие дни (исключаем выходные и праздники)

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

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

Где [праздники] — необязательный диапазон с датами нерабочих дней (например, государственные праздники).

Пример:

  • 📅 Начальная дата: 01.05.2023 (понедельник)
  • 📅 Конечная дата: 10.05.2023 (среда)
  • 🎉 Праздники: 01.05.2023 и 09.05.2023 (в ячейках D2:D3)

Формула:

=ЧИСТРАБДНИ(A2;B2;D2:D3)

Результат: 6 (а не 9 дней, так как исключены выходные + 2 праздничных дня).

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

=ЧИСТРАБДНИ.INTL(A2;B2;11;D2:D3)

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

⚠️ Внимание: Функция ЧИСТРАБДНИ считает полные рабочие дни. Если начальная или конечная дата попадает на выходной, она не учитывается. Например, разница между 06.05.2023 (суббота) и 08.05.2023 (понедельник) будет 1 день, а не 2.

Способ 4: Разница в месяцах с функцией ДАТАМЕС (для динамических расчётов)

Функция ДАТАМЕС редко используется для разницы дат, но она незаменима, если вам нужно прибавить или отнять месяцы с учётом корректного перехода через годы. Однако с её помощью можно и рассчитать разницу в месяцах между двумя датами.

Алгоритм:

  1. Используйте ДАТАМЕС, чтобы "продвинуть" начальную дату на N месяцев вперёд, пока она не превысит конечную дату.
  2. Подсчитайте количество итераций — это и будет разница в месяцах.

Пример формулы (для ячеек A2 и B2):

=ЕСЛИ(ДАТАМЕС(A2;1)<=B2; 1+РАЗНДАТ(ДАТАМЕС(A2;1);B2;"m"); 0)

Но этот метод громоздкий. Гораздо проще использовать РАЗНДАТ с параметром "m", но ДАТАМЕС пригодится для динамических диапазонов. Например, чтобы найти дату через 3 месяца после 15.01.2023:

=ДАТАМЕС("15.01.2023";3)

Результат: 15.04.2023 (автоматически учитывает разную длину месяцев).

Почему ДАТАМЕС лучше, чем простое прибавление 30 дней?

Если к 31.01.2023 прибавить 30 дней, получится 02.03.2023 (так как февраля нет 31-го). А ДАТАМЕС вернёт корректное 28.02.2023 или 29.02.2026 для високосного года.

Способ 5: Разница в годах с учётом месяца и дня (точный возраст)

Чтобы рассчитать точный возраст (например, для анкеты или договора), недостаточно просто вычесть годы. Нужно учитывать, прошёл ли день рождения в текущем году. Для этого комбинируем несколько функций:

Формула для ячеек A2 (дата рождения) и B2 (текущая дата):

=ЕСЛИ(ИЛИ(МЕСЯЦ(B2)>МЕСЯЦ(A2); И(МЕСЯЦ(B2)=МЕСЯЦ(A2); ДЕНЬ(B2)>=ДЕНЬ(A2))); РАЗНДАТ(A2;B2;"y"); РАЗНДАТ(A2;B2;"y")-1)

Разберём логику:

  1. МЕСЯЦ(B2)>МЕСЯЦ(A2) — если текущий месяц позже месяца рождения, возраст = полным годам.
  2. И(МЕСЯЦ(B2)=МЕСЯЦ(A2); ДЕНЬ(B2)>=ДЕНЬ(A2)) — если месяцы совпадают, но день текущий ≥ дня рождения.
  3. Если оба условия ложны (например, сегодня 10 мая, а день рождения 15 мая), возраст уменьшается на 1.

Пример:

  • 🎂 Дата рождения: 15.05.1990
  • 📅 Текущая дата: 10.05.2023
  • 📊 Результат: 32 (хотя разница в годах = 33, день рождения ещё не наступил).

Типичные ошибки и как их исправить

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

ОшибкаПричинаРешение
#ЗНАЧ!Ячейка содержит текст, а не датуИспользуйте =ДАТАЗНАЧ() или измените формат ячейки на Дата
#ЧИСЛО!Некорректная дата (например, 31.02.2023)Проверьте даты на валидность (используйте =ДАТА() для создания корректных дат)
Отрицательное числоНачальная дата позже конечнойПоменяйте местами ячейки или используйте =АБС(B2-A2) для модуля
Неправильный результат в месяцахРАЗНДАТ с параметром "m" возвращает полные месяцыИспользуйте "ym" для месяцев без учёта годов
Дробные дни (например, 14,5)В ячейках есть время (например, 15:30)Используйте =ЦЕЛОЕ(B2-A2) или удалите время через Формат ячеек

Если вы импортируете даты из внешних источников (например, или SQL), они могут отображаться как числа типа 44197. Чтобы преобразовать их в нормальный вид, используйте:

=ДАТА(1900;1;1)+44197-2

(где 44197 — ваше число). Минус 2 нужен из-за исторической ошибки в Excel с 29.02.1900.

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

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

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

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

где A2 — ячейка с прошлой датой. Для обновления результата при каждом открытии файла нажмите F9.

Почему РАЗНДАТ возвращает ошибку #ИМЯ?

В русских версиях Excel функция называется РАЗНДАТ, а в английских — DATEDIF. Если вы видите ошибку, проверьте язык интерфейса или используйте:

=DATEDIF(A2;B2;"d")

(работает в обеих версиях).

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

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

=(B2-A2)*24  

=(B2-A2)*1440

Убедитесь, что ячейки с датами включают время (например, 01.01.2023 14:30).

Можно ли посчитать разницу между датами в Google Таблицах?

Да, все описанные методы работают и в Google Sheets, за исключением:

  • Функция называется DATEDIF (даже в русской версии).
  • Для текущей даты используйте =TODAY() (вместо СЕГОДНЯ()).

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

Разделите разницу в днях на 7 и округлите вниз:

=ЦЕЛОЕ((B2-A2)/7)

Или используйте =ОТБР(B2-A2;7) для округления до ближайшей недели.