Как посчитать диапазон дат в Excel: формулы для дней, месяцев и лет

Почему расчёт диапазона дат в Excel вызывает сложности

На первый взгляд, вычитание одной даты из другой в Microsoft Excel кажется тривиальной задачей. Но на практике пользователи сталкиваются с неожиданными результатами: вместо количества дней программа выдаёт пятизначные числа, а при попытке посчитать рабочие дни формула возвращает ошибку #ЗНАЧ!. Всё дело в том, что Excel хранит даты не как текст, а как последовательные числа — начиная с 1 января 1900 года (это день №1). Например, 5 июня 2026 года для программы — это число 45450.

Кроме того, задачи бывают разные: кому-то нужно узнать полных лет между двумя датами, кому-то — количество рабочих дней с учётом праздников, а кому-то — разницу в часах и минутах. Для каждого случая существуют свои функции, и без знания их нюансов легко допустить ошибку. Эта статья поможет разобраться во всех тонкостях — от простейших формул до автоматизации расчётов с помощью Power Query.

Базовый метод: вычитание дат для получения дней

Самый простой способ узнать разницу между двумя датами — вычесть их друг из друга. Excel автоматически преобразует результат в количество дней. Например, если в ячейке A1 указана дата начала проекта (10.05.2026), а в B1 — дата окончания (20.05.2026), формула будет такой:

=B1-A1

Результат — 10, то есть 10 дней. Но здесь есть подводные камни:

  • 🔹 Если ячейки отформатированы как текст, Excel не сможет выполнить вычитание. Проверьте формат через Главная → Формат → Формат ячеек → Дата.
  • 🔹 При вычитании даты окончания из даты начала (например, =A1-B1) результат будет отрицательным. Это нормально, но может сбить с толку.
  • 🔹 Если одна из ячеек пустая, формула вернёт ошибку. Используйте =ЕСЛИОШИБКА(B1-A1; ""), чтобы скрыть ошибки.

Для наглядности можно применить условное форматирование: выделите ячейку с результатом, перейдите в Главная → Условное форматирование → Правила выделения ячеек → Больше и установите пороговое значение (например, 30 дней). Так вы быстро увидите задержки в проектах.

Функция РАЗНДАТ: универсальный инструмент для лет, месяцев и дней

Когда нужно посчитать не только дни, но и полные годы, месяцы или недели между датами, на помощь приходит функция =РАЗНДАТ(). Её синтаксис:

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

Аргумент единица_измерения определяет, что именно вы хотите получить:

Значение Описание Пример результата для 01.01.2020–31.12.2023
"y" Полных лет 3
"m" Полных месяцев 36
"d" Дней (игнорирует годы и месяцы) 30
"ym" Месяцев без учёта лет 0
"yd" Дней без учёта лет 364

Обратите внимание: РАЗНДАТ учитывает календарные периоды, а не фактическое время. Например, разница между 28.02.2026 и 01.03.2026 при единице "m" будет 1 месяц, хотя реально прошло всего 2 дня. Для точных расчётов комбинируйте функцию с другими методами.

Почему РАЗНДАТ иногда даёт неожиданные результаты?

Функция округляет значения в меньшую сторону. Например, разница между 31.01.2026 и 28.02.2026 при единице "m" будет 0 месяцев, хотя прошло 28 дней. Это особенность работы, а не ошибка.

📊 Какой формат дат вы чаще используете в Excel?
ДД.ММ.ГГГГ
ММ/ДД/ГГ
ДД-ММ-М
Другой

Расчёт рабочих дней: функция ЧИСТРАБДНИ

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

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

Пример: чтобы посчитать рабочие дни между 01.06.2026 и 15.06.2026 с учётом праздников 12 июня, формула будет такой:

=ЧИСТРАБДНИ("01.06.2026"; "15.06.2026"; {"12.06.2026"})

Результат — 10 рабочих дней. Важные нюансы:

  • 📅 Праздники указываются как массив дат в фигурных скобках. Для нескольких праздников используйте точку с запятой: {"01.01.2026"; "07.01.2026"}.
  • 🔄 Если конечная дата раньше начальной, функция вернёт ошибку #ЧИСЛО!. Используйте =АБС(ЧИСТРАБДНИ(...)), чтобы избежать этого.
  • 🌍 В некоторых странах выходные дни отличаются (например, пятница и суббота). Для таких случаев есть функция =ЧИСТРАБДНИ.МЕЖД с дополнительным параметром для указания выходных.

Убедитесь, что даты введены как даты, а не текст|

Создайте отдельный диапазон с праздничными днями|

Проверьте регион в настройках Excel (Файл → Параметры → Язык)|

Используйте абсолютные ссылки на праздники (например, $A$1:$A$10)-->

Разница в часах, минутах и секундах

Когда нужно посчитать временные интервалы (например, длительность звонков или время выполнения задачи), используйте формат времени. Убедитесь, что ячейки с датами включают время (например, 01.06.2026 14:30). Затем вычтите одну ячейку из другой:

=B1-A1

По умолчанию Excel отобразит результат в формате дд:чч:мм. Чтобы преобразовать его в часы, умножьте на 24:

=(B1-A1)*24

Для минут умножайте на 24*60, для секунд — на 24*60*60. Если результат отображается как дата (например, 31.12.1899), измените формат ячейки на Общий или Числовой.

⚠️ Внимание: Excel хранит время как дробную часть дня (например, 12:00 — это 0,5). При работе с большими временными диапазонами (более 24 часов) используйте формат [ч]:мм:сс, чтобы избежать сброса счёта.

Для автоматизации можно создать пользовательскую функцию на VBA, которая будет возвращать разницу в нужных единицах. Например, этот код вернёт количество часов:

Function HoursDiff(startDate As Date, endDate As Date) As Double

HoursDiff = (endDate - startDate) * 24

End Function

Продвинутые приёмы: динамические диапазоны и Power Query

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

  • 📊 Сводные таблицы: добавьте поле с датой в область строк, затем сгруппируйте по дням, месяцам или годам. Excel автоматически посчитает количество записей или суммы за период.
  • 🔄 Power Query: импортируйте данные, добавьте столбец с разницей дат (Date2 - Date1), затем загрузите обратно в Excel. Это удобно для обработки миллионов строк.
  • 📅 Условное форматирование по датам: выделите ячейки, где разница между датами превышает заданное значение (например, просроченные задачи).

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

  1. Выделите исходные данные и нажмите Данные → Из таблицы/диапазона.
  2. В редакторе запросов добавьте пользовательский столбец с формулой = [EndDate] - [StartDate].
  3. Измените тип данных нового столбца на Целое число (для дней) или Десятичное число (для часов).
  4. Нажмите Главная → Закрыть и загрузить.

Power Query обновляет результаты автоматически при изменении исходных данных — это избавляет от необходимости переписывать формулы.

Типичные ошибки и как их избежать

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

⚠️ Внимание: Если после вычитания дат результат отображается как ######, расширьте столбец — это означает, что ячейка слишком узкая для отображения числа.
  • 🗓️ Текст вместо даты: Excel не распознаёт строки вроде "1 июня" как даты. Используйте =ДАТАЗНАЧ() или формат ДД.ММ.ГГГГ.
  • 🔢 Отрицательные значения: если конечная дата раньше начальной, добавьте =АБС() или поменяйте ячейки местами.
  • 🌐 Региональные настройки: в американском формате месяц идёт первым (MM/DD/YYYY). Это может привести к путанице. Проверьте настройки в Файл → Параметры → Язык.
  • 29 февраля в високосные годы: функции вроде РАЗНДАТ корректно обрабатывают високосные годы, но при ручных расчётах легко ошибиться.

Для проверки корректности данных используйте функцию =ЕДАТА() — она добавляет указанное количество месяцев к дате и помогает выявить ошибки формата. Например:

=ЕДАТА("31.01.2026"; 1)

Результат — 29.02.2026 (а не 31.02, которого не существует). Если функция возвращает ошибку, значит, исходная дата введена неверно.

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

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

Используйте формулу =ЦЕЛОЕ((B1-A1)/7), где A1 и B1 — ячейки с датами. Для точного количества недель (включая доли) удалите функцию ЦЕЛОЕ.

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

Эта ошибка появляется, если функция введена с опечаткой (например, РАЗНДАТА) или если аргумент единица_измерения указан без кавычек (напрмер, =РАЗНДАТ(A1; B1; y) вместо =РАЗНДАТ(A1; B1; "y")).

Можно ли посчитать диапазон дат с учётом только будних дней?

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

Как выделить ячейки, где разница между датами превышает 30 дней?

Выделите диапазон с результатами, затем перейдите в Главная → Условное форматирование → Создать правило → Использовать формулу и введите =($B1-$A1)>30. Задайте формат (например, красный фон) и сохраните.

Как посчитать возраст человека в Excel?

Используйте комбинацию функций: =РАЗНДАТ(A1; СЕГОДНЯ(); "y") для полных лет, =РАЗНДАТ(A1; СЕГОДНЯ(); "ym") для месяцев и =РАЗНДАТ(A1; СЕГОДНЯ(); "md") для дней. Функция СЕГОДНЯ() всегда возвращает текущую дату.