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

Почему подсчёт дней в Excel — это не так просто, как кажется

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

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

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

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

=B1-A1

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

  • 🔹 Формат ячеек: Если ячейки с датами отформатированы как текст, Excel вернёт ошибку #ЗНАЧ!. Проверьте формат через Главная → Формат → Формат ячеек → Дата.
  • 🔹 Отрицательные значения: Если дата окончания раньше начальной, результат будет отрицательным. Используйте =ABS(B1-A1), чтобы получить модуль.
  • 🔹 Время в датах: Если в ячейках указано не только число, но и время (например, 15.05.2026 14:30), разница будет дробной. Чтобы округлить, используйте =ЦЕЛОЕ(B1-A1).
⚠️ Внимание: Если вы копируете даты из внешних источников (например, с сайтов), Excel может воспринимать их как текст. Используйте функцию =ДАТАЗНАЧ(), чтобы преобразовать текст в дату: =ДАТАЗНАЧ("15.05.2026").
📊 Как часто вы работаете с датами в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

Способ 2: Функция РАЗНДАТ (DATEDIF) — гибкость и точность

Функция РАЗНДАТ (или DATEDIF в английской версии) — это скрытая жемчужина Excel, которой нет в списке функций, но она работает. Её синтаксис:

=РАЗНДАТ(нач_дата; кон_дата; единица)

Где единица может принимать следующие значения:

Единица Описание Пример результата
"D" Количество дней между датами =РАЗНДАТ("1.01.2026"; "10.01.2026"; "D") → 9
"M" Количество полных месяцев =РАЗНДАТ("15.01.2026"; "10.03.2026"; "M") → 1
"Y" Количество полных лет =РАЗНДАТ("15.01.2020"; "10.03.2026"; "Y") → 4
"YM" Количество месяцев без учёта лет =РАЗНДАТ("15.01.2020"; "10.03.2026"; "YM") → 2
"MD" Количество дней без учёта месяцев и лет =РАЗНДАТ("15.01.2026"; "10.02.2026"; "MD") → 26

Важно: функция РАЗНДАТ не учитывает високосные годы при расчёте месяцев ("M") и лет ("Y"). Например, разница между 28.02.2026 и 01.03.2026 будет 1 месяц, даже если в феврале 2026 года 29 дней.

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

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

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

Необязательный параметр [праздники] позволяет указать диапазон ячеек с датами праздников, которые также нужно исключить. Например:

  • 📅 Без праздников: =ЧИСТРАБДНИ("01.05.2026"; "10.05.2026") → 7 дней (исключены 4 и 5 мая — выходные).
  • 🎉 С учётом праздников: Если в ячейках D1:D3 указаны даты 01.05.2026, 09.05.2026 и 10.05.2026, формула будет =ЧИСТРАБДНИ("01.05.2026"; "10.05.2026"; D1:D3) → 4 дня.
⚠️ Внимание: Функция ЧИСТРАБДНИ считает субботу и воскресенье выходными по умолчанию. Если у вас другой график (например, выходной — пятница), используйте функцию ЧИСТРАБДНИ.МЕЖД (или NETWORKDAYS.INTL), где можно задать собственные выходные дни.

Убедитесь, что даты в формате даты, а не текста|Создайте отдельный столбец для праздников|Проверьте регион (в некоторых странах выходные — пятница и суббота)|Используйте абсолютные ссылки для диапазона праздников (например, $D$1:$D$10)

-->

Способ 4: Функция ТДАТА для динамических расчётов

Функция ТДАТА (или TODAY) возвращает текущую дату и обновляется автоматически при каждом открытии файла. Это удобно для расчёта дней от сегодняшнего дня до какой-либо даты в будущем или прошлом. Например:

  • 📅 Дни до дедлайна: =B1-ТДАТА(), где B1 — дата дедлайна.
  • Дни с момента события: =ТДАТА()-A1, где A1 — дата события.
  • 🔄 Автообновление: Если файл открыт, ТДАТА() всегда покажет актуальную дату. Чтобы зафиксировать дату на момент первого открытия, используйте =СЕГОДНЯ() (в некоторых версиях Excel это синоним ТДАТА).

Пример использования с РАЗНДАТ:

=РАЗНДАТ(ТДАТА(); "31.12.2026"; "D")

Эта формула покажет, сколько дней осталось до Нового года. Обратите внимание, что ТДАТА() не учитывает время — только дату. Если вам нужно текущее время, используйте СЕЙЧАС() (или NOW).

Чем отличается ТДАТА от СЕЙЧАС?

Функция ТДАТА() возвращает только текущую дату без времени (например, 15.05.2026), тогда как СЕЙЧАС() включает и время (например, 15.05.2026 14:30:45). Если вам нужна разница в днях без учёта времени, используйте ТДАТА(), иначе Excel может вернуть дробное число (например, 1.5 дня).

Способ 5: Продвинутые сценарии — учёт праздников и кастомных выходных

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

  1. Функция ЧИСТРАБДНИ.МЕЖД: Позволяет задать собственные выходные дни через числовой код. Например, код 11 означает, что выходные — суббота и воскресенье (стандарт), а код 7 — только воскресенье. Пример:
    =ЧИСТРАБДНИ.МЕЖД("01.05.2026"; "10.05.2026"; 7; D1:D3)

    Здесь 7 — выходной только воскресенье, а D1:D3 — диапазон с праздниками.

  2. Пользовательская функция на VBA: Если логика слишком сложная, можно написать собственную функцию. Например, для учёта праздников по регионам или производственному календарю. Пример кода:
    Function CustomWorkDays(start_date, end_date, holidays_range)
    

    ' Логика подсчёта с учётом кастомных правил

    End Function

    Примечание: Для использования VBA нужно включить поддержку макросов в настройках Excel.

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

=СУММПРОИЗВ(--(ДиапазонДат>=A1); --(ДиапазонДат<=B1); --(СтатусДня="Рабочий"))

Где ДиапазонДат — столбец с датами, а СтатусДня — столбец с пометками "Рабочий"/"Выходной".

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

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

  • 🚫 Ошибка #ЗНАЧ!: Возникает, если ячейка содержит текст вместо даты. Решение — используйте =ДАТАЗНАЧ() или измените формат ячейки на Дата.
  • 🚫 Некорректная разница: Если результат вычитания дат — дробное число (например, 15.5), значит, в датах указано время. Используйте =ЦЕЛОЕ(B1-A1) или =ОКРВНИЗ(B1-A1; 0).
  • 🚫 Проблемы с високосными годами: Функция РАЗНДАТ с единицей "Y" может давать неточный результат. Например, разница между 28.02.2023 и 28.02.2026 будет 1 год, хотя фактически прошло 366 дней. Для точности используйте "D".
  • 🚫 Автообновление ТДАТА(): Если файл открыт, функция пересчитывается при каждом изменении. Чтобы зафиксировать дату, скопируйте результат и вставьте как значение (Ctrl+Shift+V).

Ещё одна частая проблема — разные системы дат в Excel. По умолчанию используется система 1900, где 1 соответствует 1 января 1900 года. Однако в некоторых версиях (особенно на Mac) может использоваться система 1904. Проверить текущую систему можно так:

=ДАТА(1900;1;1)

Если результат — 1, у вас система 1900. Если 0 — система 1904. Чтобы изменить систему, перейдите в Файл → Параметры → Дополнительно → При переходе на эту книгу → Использовать систему дат 1904.

Практические примеры: задачи из реальной жизни

Рассмотрим несколько типичных задач, с которыми сталкиваются пользователи при работе с датами в Excel:

Задача Формула Пример
Сколько дней осталось до Нового года? =ДАТА(ГОД(ТДАТА())+1;1;1)-ТДАТА() Если сегодня 15.05.2026, результат — 230 дней.
Сколько рабочих дней до дедлайна? =ЧИСТРАБДНИ(ТДАТА(); B1; Праздники) Если дедлайн 30.05.2026, а праздники — 09.05.2026 и 10.05.2026, результат — 11 дней.
Возраст сотрудника в годах и месяцах =РАЗНДАТ(A1; ТДАТА(); "Y") & " лет и " & РАЗНДАТ(A1; ТДАТА(); "YM") & " месяцев" Если дата рождения 15.06.1990, результат — "33 лет и 11 месяцев".
Дни просрочки платежа =ЕСЛИ(ТДАТА()>B1; ТДАТА()-B1; 0) Если платеж до 10.05.2026, а сегодня 15.05.2026, результат — 5 дней просрочки.
Дата через N рабочих дней =РАБДЕНЬ(ТДАТА(); 10; Праздники) Если сегодня 15.05.2026, результат — 29.05.2026 (учитывая выходные).

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

=ФИЛЬТР(ДиапазонДанных; МЕСЯЦ(ДиапазонДат)=МЕСЯЦ(ТДАТА())-1)

Эта формула работает в Excel 365 и Google Таблицах. Для старых версий Excel используйте комбинацию ИНДЕКС и ПОИСКПОЗ.

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

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

Если в ячейке нет даты, Excel вернёт ошибку. Используйте функцию ЕСЛИ для проверки:

=ЕСЛИ(И(NOT(ЕПУСТО(A1)); NOT(ЕПУСТО(B1))); B1-A1; "Данные неполные")

Эта формула вернёт разницу только если обе ячейки заполнены.

Почему разница между 01.03.2026 и 31.03.2026 равна 29, а не 30?

Excel считает количество дней между датами, а не включает обе границы. Чтобы включить обе даты, добавьте 1:

=B1-A1+1

Теперь результат будет 30 дней.

Как посчитать дни с учётом только будни (понедельник-пятница)?

Используйте функцию ЧИСТРАБДНИ без указания праздников:

=ЧИСТРАБДНИ("01.05.2026"; "10.05.2026")

Результат — 7 дней (исключены 4, 5 (выходные) и 1, 9, 10 мая, если они попадают на праздники).

Можно ли посчитать дни между датами в разных временных зонах?

Excel не поддерживает временные зоны напрямую. Преобразуйте обе даты к одной временной зоне (например, UTC) перед вычитанием. Для этого:

  1. Добавьте или вычтите разницу в часах (например, для Москвы UTC+3: =B1-A1+3/24).
  2. Используйте =ЦЕЛОЕ(), чтобы получить целые дни.

Для точных расчётов лучше использовать специализированные инструменты, например, Google Apps Script или Power Query.

Как сделать так, чтобы даты автоматически обновлялись при открытии файла?

Функции ТДАТА() и СЕЙЧАС() обновляются автоматически. Если нужно, чтобы дата фиксировалась при первом открытии, используйте VBA:

Private Sub Workbook_Open()

Sheets("Лист1").Range("A1").Value = Date

End Sub

Этот код запишет текущую дату в ячейку A1 при каждом открытии файла. Чтобы добавить код, нажмите Alt+F11, найдите ThisWorkbook в проекте и вставьте код в окно.