Как правильно высчитать дни между датами в Excel: от базовых формул до продвинутых приёмов

Введение: зачем считать дни в Excel и где это применяется

Расчёт количества дней между двумя датами — одна из самых востребованных операций в Microsoft Excel и Google Таблицах. На первый взгляд задача кажется простой: вычесть одну дату из другой. Но на практике пользователи сталкиваются с десятками нюансов: учёт выходных, исключение праздников, работа с временными метками, ошибки формата ячеек. Эта статья поможет разобраться во всех тонкостях — от элементарных формул до автоматизированных решений для сложных сценариев.

Где применяются такие вычисления? В бухгалтерии для расчёта просрочек по платежам, в логистике для определения сроков доставки, в HR-отделах при подсчёте отпускных дней или стажа сотрудников. Даже в личных финансах: например, чтобы узнать, сколько дней осталось до конца кредитного периода или до истечения срока действия скидки. Excel предлагает минимум 5 различных способов решить эту задачу — и мы разберём каждый из них с практическими примерами.

Способ 1: базовое вычитание дат (самый простой метод)

Если вам нужно просто узнать разницу между двумя датами в днях — без учёта выходных, праздников или времени — достаточно выполнить элементарное арифметическое действие. Excel хранит даты в виде последовательных чисел (начиная с 1 января 1900 года = 1), поэтому их можно вычитать как обычные значения.

Формула выглядит так:

=Конечная_дата - Начальная_дата

Пример: если в ячейке A1 указана дата начала проекта 15.05.2026, а в B1 — дата окончания 30.05.2026, то формула =B1-A1 вернёт результат 15 (дней). Важно: обе ячейки должны иметь формат "Дата", иначе Excel воспримет значения как текст и вернёт ошибку.

  • ✅ Преимущества: максимальная простота, работает во всех версиях Excel.
  • ⚠️ Ограничения: не учитывает выходные, праздники, рабочее время.
  • 🔄 Альтернатива: функция =ДАТАРАЗН() (о ней ниже).
⚠️ Внимание: Если результат отображается как дата (например, 15.01.1900), а не число — измените формат ячейки с результатом на "Общий" или "Числовой".
📊 Как часто вы используете расчёт дней в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

Способ 2: функция ДАТАРАЗН() для гибких вычислений

Функция =ДАТАРАЗН(начальная_дата; конечная_дата; единица) позволяет рассчитывать разницу не только в днях ("d"), но и в месяцах ("m"), годах ("y") или комбинациях этих единиц. Это полезно, когда нужно, например, узнать полных лет между двумя датами или количество полных месяцев стажа.

Синтаксис:

=ДАТАРАЗН(A1; B1; "d")  

=ДАТАРАЗН(A1; B1; "m")

=ДАТАРАЗН(A1; B1; "y")

Единица измерения Код в формуле Пример результата для 15.05.2026 — 30.06.2026
Дни "d" 46
Месяцы "m" 1 (полных месяцев)
Годы "y" 0
Дни без учёта годов "yd" 46 (аналогично "d")
Месяцы без учёта лет "ym" 1

Ключевое отличие от простого вычитания: функция ДАТАРАЗН игнорирует время в датах, тогда как операция =B1-A1 учитывает и часы с минутами, если они указаны. Это критично для временных меток типа 15.05.2026 14:30.

Убедитесь, что обе даты в формате "Дата"|Проверьте отсутствие текста в ячейках|Используйте кавычки для единиц измерения ("d", "m")|Для отрицательных дат поменяйте местами аргументы-->

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

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

Пример: подсчёт рабочих дней между 01.06.2026 и 15.06.2026 с исключением 12.06.2026 (День России):

=ЧИСТРАБДНИ("01.06.2026"; "15.06.2026"; "12.06.2026")
  • 📅 Нюанс 1: Праздники указываются как диапазон ячеек (например, D1:D5) или перечислением в кавычках.
  • Нюанс 2: Функция считает полные рабочие дни. Если начальная дата — воскресенье, оно не учитывается.
  • 🔄 Альтернатива: Для учёта нестандартных выходных (например, пятница-суббота) потребуется функция ЧИСТРАБДНИ.МЕЖД (см. следующий раздел).
⚠️ Внимание: В Google Таблицах функция называется =NETWORKDAYS, а не ЧИСТРАБДНИ. Синтаксис аналогичен, но аргументы разделяются запятыми, а не точкой с запятой.
Как указать праздники из другого листа?

Создайте на отдельном листе (например, "Праздники") столбец с датами. Затем в основной формуле укажите диапазон как Праздники!A1:A10. Это позволит легко обновлять список праздников без правки всех формул.

Способ 4: нестандартные выходные и сложные календари

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

  • 1 — суббота-воскресенье (стандарт)
  • 2 — воскресенье-понедельник
  • 11 — только воскресенье
  • 12 — пятница-суббота
  • 13 — суббота-пятница (для мусульманских стран)

Пример для выходных пятница-суббота:

=ЧИСТРАБДНИ.МЕЖД("01.06.2026"; "15.06.2026"; 12; D1:D3)

Для ещё более гибких календарей (например, сменный график) потребуется комбинация функций ЕСЛИ, ДЕНЬНЕД и массивов. В Excel 365 и 2021 доступны динамические массивы, которые упрощают такие вычисления без необходимости нажатия Ctrl+Shift+Enter.

Способ 5: расчёт дней с учётом времени (точные временные интервалы)

Если ваши даты содержат не только календарную дату, но и время (например, 15.05.2026 09:30), простое вычитание вернёт дробное число, где целая часть — дни, а дробная — доля суток. Чтобы преобразовать это в часы, минуты или секунды, используйте:

  • 🕒 Часы: =(B1-A1)*24
  • ⏱️ Минуты: =(B1-A1)*24*60
  • ⏲️ Секунды: =(B1-A1)*24*60*60

Пример: если в A1 указано 15.05.2026 09:00, а в B116.05.2026 17:30, то:

=B1-A1        

=(B1-A1)*24

Для отображения результата в формате "ДД:ЧЧ:ММ" примените к ячейке пользовательский формат [ч]:мм:сс или д.м.гг ч:мм.

⚠️ Внимание: При работе с временными метками убедитесь, что в настройках Excel (Файл → Параметры → Дополнительно) включена опция "Использовать систему дат 1900". В противном случае возможны ошибки на 4 года.

Распространённые ошибки и как их избежать

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

Ошибка Причина Решение
#ЗНАЧ! Ячейка содержит текст вместо даты Преобразуйте текст в дату с помощью =ДАТАЗНАЧ() или ТЕКСТ.В.ДАТУ()
Некорректный результат (например, 43125) Ячейка с результатом имеет формат "Дата" Измените формат на "Общий" или "Числовой"
Отрицательное число дней Начальная дата позже конечной Поменяйте местами аргументы или используйте =АБС(B1-A1)
#ИМЯ? Опечатка в названии функции Проверьте синтаксис (например, ЧИСТРАБДНИ, а не ЧИСЛОРАБДНЕЙ)

Ещё одна типичная проблема — автоматическое преобразование дат при импорте данных. Например, дата 01.02.2026 может превратиться в 02.01.2026 из-за региональных настроек. Чтобы этого избежать, используйте:

  • 📎 Формат текста: Предварительно отформатируйте столбец как "Текст" перед вводом дат.
  • 🔢 Функции преобразования: =ДАТАЗНАЧ("01.02.2026") или =ТЕКСТ.В.ДАТУ("01-02-2026"; "дд.мм.гггг").

Продвинутые техники: массивы, Power Query и VBA

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

  • 🔢 Формулы массива: Комбинация ЕСЛИ, ДЕНЬНЕД и СУММ для кастомизированных правил. Пример:
    =СУММ(--(ДЕНЬНЕД(СТРОКА(НЕПРЯМ($A$1:$A$30))-1;2)<6);--(СТРОКА(НЕПРЯМ($A$1:$A$30))-1>=$A$1);--(СТРОКА(НЕПРЯМ($A$1:$A$30))-1<=$B$1))
    Внимание: В старых версиях Excel требует ввода через Ctrl+Shift+Enter.
  • 📊 Power Query: Инструмент для импорта и трансформации данных. Позволяет создать столбец с разницей дат и применить сложные фильтры (например, исключить даты из другой таблицы).
  • 🤖 VBA: Скрипты для автоматизации. Пример кода для подсчёта рабочих дней с учётом индивидуального графика:
    Function CustomWorkDays(startDate As Date, endDate As Date, Optional holidays As Range) As Long
    

    Dim dayCount As Long, i As Long

    dayCount = 0

    For i = startDate To endDate

    If Weekday(i, vbMonday) < 6 Then

    If Not IsHoliday(i, holidays) Then dayCount = dayCount + 1

    End If

    Next i

    CustomWorkDays = dayCount

    End Function

    Function IsHoliday(checkDate As Date, holidays As Range) As Boolean

    Dim cell As Range

    If holidays Is Nothing Then Exit Function

    For Each cell In holidays

    If cell.Value = checkDate Then

    IsHoliday = True

    Exit Function

    End If

    Next cell

    End Function

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

Как запустить VBA в Excel?

1. Нажмите Alt + F11 для открытия редактора VBA.

2. Вставьте код в модуль (Insert → Module).

3. Вернитесь в Excel и запустите макрос через Разработчик → Макросы (или Alt + F8).

4. Используйте функцию в ячейке как обычно: =CustomWorkDays(A1; B1; D1:D10).

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

Можно ли посчитать дни между датами в Google Таблицах?

Да, все описанные функции работают и в Google Таблицах, но с двумя нюансами:

  • Разделитель аргументов — запятая (,), а не точка с запятой (;).
  • Названия функций на английском: =DATEDIF, =NETWORKDAYS, =WORKDAY.INTL.

Пример: =NETWORKDAYS(A1, B1, D1:D5).

Как исключить из расчёта конкретные дни недели (например, среду)?

Используйте комбинацию функций ДЕНЬНЕД и СУММПРОИЗВ:

=СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(НЕПРЯМ($A$1:INDEX($A:$A; $B$1-$A$1+1)))-1)<>4))

Здесь 4 — код среды (в системе, где понедельник = 1). Для других дней измените число.

Почему функция ДАТАРАЗН возвращает ошибку #ЧИСЛО!?

Ошибка возникает в трёх случаях:

  1. Начальная дата позже конечной (используйте =АБС(ДАТАРАЗН(...))).
  2. Один из аргументов не является датой (проверьте формат ячеек).
  3. Неправильный код единицы измерения (допустимы только "d", "m", "y" и их комбинации).
Как посчитать количество полных недель между датами?

Используйте формулу:

=ЦЕЛОЕ((B1-A1)/7)

Для учёта только полных недель (например, с понедельника по воскресенье) добавьте корректировку:

=ЦЕЛОЕ((B1-A1-ДЕНЬНЕД(A1;2)+1)/7)
Можно ли автоматически обновлять список праздников?

Да, с помощью Power Query или VBA:

  • 🔄 Power Query: Подключитесь к внешнему источнику (например, государственному календарю праздников) и обновите данные по расписанию.
  • 🤖 VBA: Напишите скрипт, который будет парсить праздники с сайта и записывать их в заданный диапазон.

Пример VBA для загрузки праздников с Google Calendar API:

' Требуется подключить библиотеку Microsoft XML, v6.0

Sub LoadHolidays()

Dim http As New MSXML2.XMLHTTP60

Dim url As String, response As String

url = "https://www.googleapis.com/calendar/v3/calendars/ru.russian%23holiday@group.v.calendar.google.com/events?key=YOUR_API_KEY"

http.Open "GET", url, False

http.Send

response = http.responseText

' Далее парсинг JSON и запись дат в лист

End Sub