Как в Excel сделать вычитание дат: 7 рабочих способов с примерами

Работа с датами в 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, а в B220.01.2026, формула вернёт 5 (дней). Но что делать, если нужны не дни, а месяцы или годы?

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

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 воспринимает её как строку.

Решение:

  1. Выделите проблемную ячейку.
  2. Нажмите Ctrl + 1, выберите формат Дата.
  3. Если не помогает, используйте функцию ДАТАЗНАЧ для преобразования текста в дату:
    =ДАТАЗНАЧ(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, а в B217.05.2026 10:30, то:

  • Разница в днях: =ЦЕЛОЕ(B2-A2)2.
  • Разница в часах: =(B2-A2)*2450,5 (часов).
⚠️ Внимание: При работе с временем убедитесь, что ячейки имеют формат Дата или Время. Если время введено как текст (например, "14:30"), используйте функцию ВРЕМЗНАЧ для преобразования.

7. Автоматизация: вычитание дат в Power Query и VBA

Для обработки больших массивов данных или создания сложных правил (например, учёта праздников по регионам) стандартных функций Excel может быть недостаточно. В таких случаях поможет Power Query или VBA.

Способ 1: Power Query (для динамических отчётов)

Если ваши данные хранятся в таблице, вы можете:

  1. Выделить диапазон и нажать Данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавить столбец с разницей дат:
    = Date.From([Дата окончания]) - Date.From([Дата начала])
  3. Преобразовать результат в дни с помощью 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) & " недель"