Работа с датами в Microsoft Excel — одна из самых востребованных задач среди пользователей. Нужно ли посчитать срок выполнения проекта, определить возраст клиента или рассчитать просрочку по платежу — без вычитания дат не обойтись. Но даже опытные пользователи иногда сталкиваются с неожиданными результатами: вместо корректной разницы в днях Excel выдаёт странные числа, ошибки или вовсе игнорирует формат ячеек.
Проблема в том, что Excel хранит даты не как текст, а как серийные числа (где 1 — это 1 января 1900 года). Это позволяет выполнять математические операции, но требует понимания нюансов. Например, простая формула =B2-A2 вернёт разницу в днях, но что делать, если нужны месяцы, годы или рабочие дни с учётом праздников? А как быть, если одна из дат введена как текст?
В этой статье разберём 7 способов вычитания дат — от базовых до продвинутых, включая обработку ошибок и автоматизацию. Вы узнаете, как избежать типичных ловушек (например, ошибки #ЗНАЧ! при вычитании текста из даты) и научитесь рассчитывать разницу с учётом календарных особенностей.
1. Базовое вычитание: разница в днях между двумя датами
Начнём с самого простого — вычисления количества дней между двумя датами. Для этого достаточно использовать стандартную арифметическую операцию.
Допустим, у вас есть две ячейки с датами: A2 (дата начала) и B2 (дата окончания). Формула будет выглядеть так:
=B2-A2
Excel автоматически вернёт разницу в днях. Но здесь есть подводные камни:
- 📅 Если ячейки отформатированы как текст, Excel не распознает их как даты. Чтобы исправить, выделите ячейки и выберите формат
Датав менюГлавная → Формат ячеек. - ⚠️ Если дата введена как
12.05.2026, а система ожидает формат05.12.2026, Excel может воспринять её как текст. Проверьте региональные настройки вФайл → Параметры → Язык. - 🔄 Если результат отображается как дата (например,
01.01.1900), измените формат ячейки с результатом наОбщийилиЧисловой.
Пример: если в A2 указано 15.01.2026, а в B2 — 20.01.2026, формула вернёт 5 (дней). Но что делать, если нужны не дни, а месяцы или годы?
2. Вычитание с учётом месяцев и лет: функции РАЗНДАТ и DATEDIF
Для расчёта разницы в месяцах или годах стандартное вычитание не подходит. Здесь на помощь приходит функция РАЗНДАТ (или DATEDIF в английской версии). Она скрыта в списке функций, но работает стабильно:
=РАЗНДАТ(дата_начала; дата_окончания; "единица_измерения")
Аргумент "единица_измерения" может принимать следующие значения:
| Код | Описание | Пример результата |
|---|---|---|
"d" |
Разница в днях | =РАЗНДАТ(A2;B2;"d") → 365 |
"m" |
Разница в полных месяцах | =РАЗНДАТ(A2;B2;"m") → 12 |
"y" |
Разница в полных годах | =РАЗНДАТ(A2;B2;"y") → 1 |
"ym" |
Разница в месяцах без учёта лет | =РАЗНДАТ(A2;B2;"ym") → 3 (если разница 1 год и 3 месяца) |
"md" |
Разница в днях без учёта месяцев и лет | =РАЗНДАТ(A2;B2;"md") → 15 |
Пример: чтобы узнать, сколько полных лет прошло с 15.05.2010 до 10.03.2026, используйте:
=РАЗНДАТ("15.05.2010"; "10.03.2026"; "y")
Результат — 13 (полных лет).
⚠️ Внимание: ФункцияРАЗНДАТне учитывает високосные годы при расчёте дней. Если вам нужна точная разница с учётом високосных дней, используйте комбинацию функцийГОД,МЕСЯЦиДЕНЬ.
3. Вычитание дат с учётом рабочих дней: функция ЧИСТРАБДНИ
Если вам нужно посчитать только рабочие дни (исключая выходные и праздники), используйте функцию ЧИСТРАБДНИ:
=ЧИСТРАБДНИ(дата_начала; дата_окончания; [праздники])
Аргумент [праздники] — необязательный диапазон ячеек с датами праздников. Например, если в ячейках D2:D5 перечислены праздники (например, 01.01.2026, 07.01.2026), формула будет:
=ЧИСТРАБДНИ(A2; B2; D2:D5)
Пример: разница между 01.01.2026 и 10.01.2026 составляет 9 календарных дней, но с учётом выходных (1–2, 6–7 января) и праздников (1–8 января) функция вернёт 1 рабочий день (10 января).
- 📊 По умолчанию
ЧИСТРАБДНИсчитает выходными субботу и воскресенье. Если у вас другой график (например, пятница и суббота), используйте функциюЧИСТРАБДНИ.МЕЖД. - 🗓️ Для автоматического учёта государственных праздников можно подгружать их из внешних источников (например, с сайта Госуслуг) через
Power Query.
⚠️ Внимание: Если в аргументе[праздники]указаны даты, которые не попадают в диапазондата_начала–дата_окончания, Excel проигнорирует их. Это может привести к завышенному результату.
Убедиться, что даты введены как даты, а не текст|
Создать список праздников в отдельном диапазоне|
Проверить региональные настройки выходных дней|
Использовать ЧИСТРАБДНИ.МЕЖД для нестандартных выходных-->
4. Ошибки при вычитании дат и как их исправить
Даже простая операция вычитания дат может давать сбои. Рассмотрим типичные ошибки и способы их устранения.
Ошибка #1: #ЗНАЧ! (несоответствие типов данных)
Причина: одна или обе ячейки содержат текст, а не дату. Например, если дата введена как '15.05.2026 (с апострофом), Excel воспринимает её как строку.
Решение:
- Выделите проблемную ячейку.
- Нажмите
Ctrl + 1, выберите форматДата. - Если не помогает, используйте функцию
ДАТАЗНАЧдля преобразования текста в дату:=ДАТАЗНАЧ(A2)
Ошибка #2: Неправильный результат (например, отрицательное число дней)
Причина: даты перепутаны местами (из большей даты вычитается меньшая). Excel не выдаст ошибку, но результат будет отрицательным.
Решение: используйте функцию АБС для получения модуля числа:
=АБС(B2-A2)
Ошибка #3: Результат отображается как дата (например, 01.01.1900)
Причина: ячейка с результатом имеет формат Дата.
Решение: измените формат на Общий или Числовой.
Почему Excel иногда показывает 29.02.1900?
В Excel даты хранятся как числа, где 1 — это 1 января 1900 года. Если разница между датами равна 59 (например, 29 февраля 1900 года), Excel может ошибочно интерпретировать это как дату. Это баг, связанный с тем, что 1900 год в Excel считается високосным (хотя на самом деле он не является таковым).
5. Продвинутые приёмы: вычитание даты из текущей даты
Часто требуется посчитать, сколько дней прошло с определённой даты до сегодня. Для этого используйте функцию СЕГОДНЯ:
=СЕГОДНЯ()-A2
Эта формула вернёт количество дней между датой в ячейке A2 и текущей датой. Но есть нюансы:
- 🔄 Функция
СЕГОДНЯпересчитывается при каждом открытии файла. Если вам нужно зафиксировать дату, используйтеCtrl + ;(горячие клавиши для вставки текущей даты). - ⏳ Чтобы узнать, сколько полных лет прошло с даты в
A2, комбинируйтеРАЗНДАТиСЕГОДНЯ:=РАЗНДАТ(A2; СЕГОДНЯ(); "y") - 📅 Для автоматического обновления возраста клиентов в базе данных используйте
СЕГОДНЯв комбинации сЕСЛИ, чтобы избегать отрицательных значений при будущих датах.
Пример: если в A2 указана дата рождения 15.05.1990, формула =РАЗНДАТ(A2; СЕГОДНЯ(); "y") вернёт текущий возраст в годах.
6. Вычитание времени вместе с датой
Если ваши ячейки содержат не только даты, но и время (например, 15.05.2026 14:30), стандартное вычитание вернёт разницу в днях и дробную часть, где дробь — это время.
Пример: разница между 15.05.2026 10:00 и 16.05.2026 12:00 составит 1,083 (1 день и 2 часа). Чтобы разделить дни и время:
- 📉 Для извлечения дней используйте
ЦЕЛОЕ:=ЦЕЛОЕ(B2-A2) - ⏱️ Для извлечения времени умножьте дробную часть на 24 (часы), 1440 (минуты) или 86400 (секунды):
=(B2-A2)-ЦЕЛОЕ(B2-A2)Затем умножьте на нужный коэффициент.
- 🔧 Чтобы отформатировать результат как
дд:чч:мм, выберите формат ячеек[ч]:ммилид.м.гггг ч:мм.
Пример: если в A2 указано 15.05.2026 08:00, а в B2 — 17.05.2026 10:30, то:
- Разница в днях:
=ЦЕЛОЕ(B2-A2)→2. - Разница в часах:
=(B2-A2)*24→50,5(часов).
⚠️ Внимание: При работе с временем убедитесь, что ячейки имеют форматДатаилиВремя. Если время введено как текст (например,"14:30"), используйте функциюВРЕМЗНАЧдля преобразования.
7. Автоматизация: вычитание дат в Power Query и VBA
Для обработки больших массивов данных или создания сложных правил (например, учёта праздников по регионам) стандартных функций Excel может быть недостаточно. В таких случаях поможет Power Query или VBA.
Способ 1: Power Query (для динамических отчётов)
Если ваши данные хранятся в таблице, вы можете:
- Выделить диапазон и нажать
Данные → Из таблицы/диапазона. - В редакторе Power Query добавить столбец с разницей дат:
= Date.From([Дата окончания]) - Date.From([Дата начала]) - Преобразовать результат в дни с помощью
Duration.Days.
Способ 2: VBA (для пользовательских функций)
Создайте собственную функцию для вычитания дат с учётом специфических правил (например, исключение корпоративных праздников):
Function DaysDiff(startDate As Date, endDate As Date, Optional holidays As Range) As Long
Dim diff As Long, i As Long
diff = endDate - startDate
If Not holidays Is Nothing Then
For i = 1 To holidays.Rows.Count
If holidays.Cells(i, 1).Value >= startDate And holidays.Cells(i, 1).Value <= endDate Then
diff = diff - 1
End If
Next i
End If
DaysDiff = diff
End Function
Теперь в Excel можно использовать:
=DaysDiff(A2; B2; D2:D10)
Где D2:D10 — диапазон с праздничными датами.
FAQ: Частые вопросы о вычитании дат в Excel
Можно ли вычитать даты в разных форматах (например, ДД.ММ.ГГГГ и ММ/ДД/ГГГГ)?
Да, но сначала приведите их к единому формату с помощью функции ДАТА или ДАТАЗНАЧ. Например:
=ДАТАЗНАЧ("15/05/2026") - ДАТАЗНАЧ("15.05.2026")
Если Excel не распознаёт формат, проверьте региональные настройки в Файл → Параметры → Язык.
Как посчитать разницу между датами в годах с учётом месяцев? Например, с 15.12.2020 до 10.01.2026 — это 3 года или 4?
Используйте комбинацию функций:
=ЕСЛИ(И(МЕСЯЦ(B2)<МЕСЯЦ(A2); ДЕНЬ(B2)<ДЕНЬ(A2)); ГОД(B2)-ГОД(A2)-1; ГОД(B2)-ГОД(A2))
Для примера выше результат будет 3 (поскольку 10.01.2026 ещё не наступило полных 4 года с 15.12.2020).
Почему при вычитании дат получается ######?
Это означает, что ячейка слишком узкая для отображения результата. Расширьте столбец или измените формат ячейки на Общий.
Можно ли вычитать даты в Google Таблицах?
Да, синтаксис аналогичен Excel. Используйте:
=B2-A2
или
=DATEDIF(A2; B2; "d")
Отличие только в разделителе аргументов: в Google Таблицах используется запятая (,), а не точка с запятой (;).
Как посчитать количество недель между датами?
Разделите разницу в днях на 7:
=ЦЕЛОЕ((B2-A2)/7)
Для точного результата с остатком используйте:
=ОСТАТ((B2-A2); 7) & " дней из " & ЦЕЛОЕ((B2-A2)/7) & " недель"