Вычитание дат в Microsoft Excel для расчета количества дней между ними — одна из самых востребованных операций при работе с временными интервалами. Если при попытке получить разницу между датами вы получаете ошибку #ЗНАЧ!, некорректный результат или просто не знаете, какую формулу применить — проблема кроется в формате ячеек или выборе неподходящего метода. Например, формула =B2-A2 вернет количество дней только если обе ячейки имеют формат Дата, а не Текст или Общий.
В этой статье разберем 5 рабочих способов подсчета дней между датами — от элементарного вычитания до учета рабочих дней с исключением праздников. Особое внимание уделим типичным ошибкам: почему Excel может показывать отрицательные значения, как исправить формат ячеек с датами "25.01.2026", преобразующихся в числа вроде 45301, и что делать, если даты хранятся как текст. Все примеры протестированы в Excel 2019–2023 и Excel Online.
1. Простое вычитание дат: базовый метод
Самый быстрый способ узнать, сколько дней прошло между двумя датами — вычесть одну дату из другой. Формула выглядит так:
=Конечная_дата - Начальная_дата
Например, если в ячейке A2 указана дата начала проекта 01.06.2026, а в B2 — дата окончания 15.06.2026, формула =B2-A2 вернет значение 14.
Критические нюансы метода:
- 📅 Обе ячейки должны иметь формат Дата (проверьте через
Главная → Формат → Формат ячеек). Если дата отображается как число (например,45467), Excel воспринимает ее как количество дней с 01.01.1900. - ⚠️ При обратном порядке дат (начальная позже конечной) результат будет отрицательным. Чтобы избежать этого, используйте
=ABS(B2-A2). - 🔄 Если даты введены как текст (например, через копирование из PDF), предварительно преобразуйте их с помощью
ДАТАЗНАЧ().
| Формула | Пример | Результат | Пояснение |
|---|---|---|---|
=B2-A2 | 15.06.2026 - 01.06.2026 | 14 | Количество полных дней между датами |
=ABS(B2-A2) | 01.06.2026 - 15.06.2026 | 14 | Модуль разницы (всегда положительное число) |
=ДАТАЗНАЧ("15.06.2026")-A2 | Текстовая дата - 01.06.2026 | 14 | Преобразование текста в дату |
⚠️ Внимание: Если после вычитания вы видите результат вроде 45467 вместо ожидаемого количества дней, проверьте формат ячейки с результатом. Он должен быть Общий или Числовой, а не Дата.
2. Функция ДАТАРАЗН: гибкий расчет с выбором единиц
Функция ДАТАРАЗН (англ. DATEDIF) позволяет вычислять разницу между датами не только в днях, но и в месяцах или годах. Синтаксис:
=ДАТАРАЗН(Начальная_дата; Конечная_дата; Единица_измерения)
Где Единица_измерения может принимать значения:
"d"— дни;"m"— полные месяцы;"y"— полные годы;"yd"— дни без учета годов;"md"— дни без учета месяцев и годов.
Пример: =ДАТАРАЗН("01.01.2026"; "31.12.2026"; "d") вернет 365 (или 366 для високосного года). Главное преимущество функции — корректная работа с частичными периодами. Например, =ДАТАРАЗН("01.01.2026"; "15.02.2026"; "m") даст 1 (полный месяц), а не 1.5.
Почему ДАТАРАЗН не документирована в Excel?
Функция ДАТАРАЗН унаследована из Lotus 1-2-3 и поддерживается в Excel для совместимости, но официально не документирована Microsoft. Несмотря на это, она работает во всех версиях, включая Excel 365.
⚠️ Внимание: В русских версиях Excel функция называетсяДАТАРАЗН, а в английских —DATEDIF. Если формула не работает, проверьте язык интерфейса или используйте англоязычный вариант с точкой с запятой:=DATEDIF(A2;B2;"d").
3. Функция РАЗНДАТ: альтернатива для новых версий Excel
В Excel 2013 и новее появилась функция РАЗНДАТ (англ. DAYS), которая упрощает подсчет дней между датами. Синтаксис:
=РАЗНДАТ(Начальная_дата; Конечная_дата)
Пример: =РАЗНДАТ("01.01.2026"; "10.01.2026") вернет 9. Преимущества функции:
- 🔹 Проще в использовании — не требует указания единицы измерения (всегда возвращает дни).
- 🔹 Корректно обрабатывает текстовые даты (например,
РАЗНДАТ("1-янв-2026"; B2)). - 🔹 Поддерживает массивы (можно передавать диапазоны ячеек).
Ограничение: РАЗНДАТ недоступна в Excel 2010 и более ранних версиях. Для них используйте ДАТАРАЗН или простое вычитание.
4. Учет рабочих дней: функция ЧИСТРАБДНИ
Если нужно посчитать только рабочие дни (исключая субботу и воскресенье), используйте функцию ЧИСТРАБДНИ (англ. NETWORKDAYS):
=ЧИСТРАБДНИ(Начальная_дата; Конечная_дата; [Праздники])
Необязательный аргумент [Праздники] позволяет исключить дополнительные дни (например, государственные праздники). Пример:
- 📊
=ЧИСТРАБДНИ("01.06.2026"; "15.06.2026")→ вернет 11 (14 дней минус 2 выходных дня в субботу и воскресенье). - 📅
=ЧИСТРАБДНИ("01.06.2026"; "15.06.2026"; D2:D5), гдеD2:D5содержит даты праздников (например, 12 июня), вернет 10.
Важно: Функция считает субботу и воскресенье выходными по умолчанию. Если у вас другой график (например, выходной — пятница), используйте ЧИСТРАБДНИ.МЕЖД (англ. NETWORKDAYS.INTL), где можно задать собственные выходные дни.
1. Убедитесь, что даты в формате "Дата", а не "Текст"|false
2. Создайте отдельный столбец для праздников (если нужны)|false
3. Проверьте региональные настройки (в русских версиях разделитель — точка с запятой)|false
4. Для нестандартных выходных используйте ЧИСТРАБДНИ.МЕЖД|false
-->
5. Ошибки и их исправление
Даже в простых расчетах с датами пользователи сталкиваются с типичными ошибками. Вот самые распространенные и способы их устранения:
| Ошибка | Причина | Решение |
|---|---|---|
#ЗНАЧ! | Ячейка содержит текст вместо даты | Используйте ДАТАЗНАЧ() или измените формат ячейки |
| Отрицательное число | Начальная дата позже конечной | Поменяйте местами аргументы или используйте ABS() |
Результат в формате даты (например, 01.01.1900) | Ячейка с результатом имеет формат "Дата" | Измените формат на "Общий" или "Числовой" |
#ИМЯ? | Опечатка в названии функции | Проверьте синтаксис (например, ДАТАРАЗН, а не ДАТРАЗН) |
Если даты хранятся как текст (например, после импорта из CSV), преобразуйте их с помощью:
=ДАТАЗНАЧ(LEFT(A2;10))
Где LEFT(A2;10) берет первые 10 символов из ячейки (подходит для формата ДД.ММ.ГГГГ).
6. Продвинутые сценарии: учет времени, временные зоны, динамические даты
Для сложных задач, где важно учитывать не только дни, но и часы/минуты, или работать с динамическими датами (например, "сегодня"), используйте комбинации функций:
- 🕒 Разница в часах:
=(B2-A2)*24. Пример:=("15.06.2026 18:00"-"15.06.2026 9:00")*24→ 9. - 📅 Динамическая дата "сегодня":
=СЕГОДНЯ()-A2(количество дней с заданной даты до текущего дня). - ⏳ Учет временных зон: Если даты в разных часовых поясах, сначала приведите их к UTC с помощью
ВРЕМЯ()или макросов.
Для автоматизации отчетов полезно создавать динамические диапазоны. Например, чтобы всегда показывать данные за последние 30 дней:
=ФИЛЬТР(A2:B100; (СЕГОДНЯ()-A2:A100)<=30)
Где A2:A100 — столбец с датами.
7. Практические примеры для бизнеса
Расчет дней между датами активно используется в бизнес-задачах. Вот 3 готовых решения:
- Срок выполнения заказа:
=ЕСЛИ(RAZNДАТ(Дата_заказа; СЕГОДНЯ())>14; "Просрочено"; "В срок")Отмечает заказы, которые выполняются дольше 14 дней.
- Возраст клиента:
=ДАТАРАЗН(Дата_рождения; СЕГОДНЯ(); "y") & " лет"Возвращает полные годы (например, "25 лет").
- Остаток дней до дедлайна:
=МАКС(0; Дедлайн-СЕГОДНЯ())Показывает дни до завершения проекта (не уходит в минус).
Для визуализации результатов добавьте условное форматирование:
Главная → Условное форматирование → Правила выделения ячеек → Меньше или равно → 0 (красный цвет для просроченных задач).
Частые вопросы (FAQ)
Как посчитать дни между датами, если они в разных листах?
Используйте ссылки на листы. Например: =Лист2!B2-Лист1!A2. Убедитесь, что форматы дат на обоих листах совпадают.
Почему формула =B2-A2 возвращает ######?
Это означает, что столбец слишком узкий для отображения результата. Расширьте столбец или измените формат ячейки на "Общий".
Можно ли посчитать дни между датой и текущим временем?
Да, используйте =СЕГОДНЯ()-A2 для дней или =(СЕГОДНЯ()+ВРЕМЯ(ЧАС(ТДАТА());МИНУТЫ(ТДАТА());0))-A2 для учета часов.
Как исключить праздники из расчета рабочих дней?
Создайте список праздников в отдельном диапазоне (например, D2:D10) и укажите его в третьем аргументе ЧИСТРАБДНИ:
=ЧИСТРАБДНИ(A2; B2; D2:D10)
Работает ли РАЗНДАТ в Google Sheets?
Нет, в Google Таблицах используйте =DAYS(B2; A2) (аргументы переставлены местами) или простое вычитание.