Работа с датами в 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".
Способ 1: Вычитание дат (самый простой метод для дней)
Если вам нужна разница только в днях, достаточно вычесть одну дату из другой:
=Конечная_дата - Начальная_дата
Например, для ячеек A2 (01.05.2023) и B2 (15.05.2023) формула будет:
=B2-A2
Результат: 14 (дней).
Этот метод идеален для расчёта:
- 📦 Сроков доставки товара
- ⏳ Просрочки платежей
- 📅 Длительности проектов
Но есть нюансы:
- Если начальная дата позже конечной, результат будет отрицательным (например,
-5). - Если ячейки содержат время (например,
01.01.2023 14:30), разница будет в долях дня (например,14,52= 14 дней и 12.5 часов).
⚠️ Внимание: Если вы копируете даты из внешних источников (например, с сайта), Excel может воспринять их как текст. Используйте=ДАТАЗНАЧ(текст), чтобы преобразовать в дату:=ДАТАЗНАЧ("01.01.2023").
☑️ Проверка перед вычитанием дат
Способ 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.2020 | 31.12.2023 | 1460 | Дней между датами (включая 29.02.2020) |
=РАЗНДАТ(A2;B2;"y") | 15.06.2021 | 10.05.2026 | 2 | Полных лет (не учитывает 11 месяцев) |
=РАЗНДАТ(A2;B2;"ym") | 01.01.2023 | 15.03.2023 | 2 | Месяцев без учёта годов |
=РАЗНДАТ(A2;B2;"md") | 10.05.2023 | 25.05.2023 | 15 | Дней без учёта месяцев |
Важный момент: РАЗНДАТ всегда округляет вниз. Например, разница между 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: Разница в месяцах с функцией ДАТАМЕС (для динамических расчётов)
Функция ДАТАМЕС редко используется для разницы дат, но она незаменима, если вам нужно прибавить или отнять месяцы с учётом корректного перехода через годы. Однако с её помощью можно и рассчитать разницу в месяцах между двумя датами.
Алгоритм:
- Используйте
ДАТАМЕС, чтобы "продвинуть" начальную дату на N месяцев вперёд, пока она не превысит конечную дату. - Подсчитайте количество итераций — это и будет разница в месяцах.
Пример формулы (для ячеек 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)
Разберём логику:
МЕСЯЦ(B2)>МЕСЯЦ(A2)— если текущий месяц позже месяца рождения, возраст = полным годам.И(МЕСЯЦ(B2)=МЕСЯЦ(A2); ДЕНЬ(B2)>=ДЕНЬ(A2))— если месяцы совпадают, но день текущий ≥ дня рождения.- Если оба условия ложны (например, сегодня 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) или удалите время через Формат ячеек |
Если вы импортируете даты из внешних источников (например, 1С или 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) для округления до ближайшей недели.