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

Почему расчёт дней в Excel — это не только про разницу дат

На первый взгляд, подсчёт дней между двумя датами кажется тривиальной задачей: взял две ячейки, вычел одну из другой — и готов результат. Но на практике всё гораздо сложнее. Что если нужно исключить выходные? А если учитывать только рабочие дни с учётом государственных праздников? Или посчитать дни до конкретной даты от сегодняшнего дня, при этом автоматически обновляя результат каждый день?

Excel предлагает 7 различных способов расчёта дней — от элементарных арифметических операций до комплексных формул с массивами и пользовательскими функциями. В этой статье разберём каждый метод на реальных примерах, покажем типичные ошибки и дадим готовые шаблоны для копирования. Особое внимание уделим неочевидным нюансам, из-за которых формулы дают неверный результат (например, почему ДАТАЗНАЧ может "обманывать" при импорте данных из CSV).

Независимо от вашей задачи — будь то расчёт срока выполнения проекта, подсчёт дней до дедлайна или анализ временных интервалов — здесь вы найдёте оптимальное решение. А для тех, кто работает с большими массивами данных, мы подготовили уникальный метод ускорения вычислений с помощью динамических массивов в Excel 365.

Метод 1: Простая разница между датами (базовая формула)

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

Формула:

=B2-A2

где B2 — более поздняя дата, а A2 — более ранняя.

  • Плюсы: работает во всех версиях Excel, не требует функций, максимально быстро.
  • Минусы: не учитывает выходные, праздники или рабочие дни.
  • 🔄 Пример: если в A2 стоит 15.05.2026, а в B220.05.2026, результат будет 5.

Важно: если даты введены как текст (например, при импорте из CSV), формула вернёт ошибку. Чтобы исправить это, используйте ДАТАЗНАЧ:

=ДАТАЗНАЧ(B2)-ДАТАЗНАЧ(A2)

Метод 2: Функция РАЗНДАТ — гибкость с выбором единиц измерения

Функция РАЗНДАТ (англ. DATEDIF) позволяет рассчитывать разницу не только в днях, но и в месяцах или годах. Синтаксис:

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

Для подсчёта дней используйте параметр "d":

=РАЗНДАТ(A2; B2; "d")
Параметр Описание Пример результата
"d" Количество дней 365 (разница в 1 год)
"m" Количество полных месяцев 12 (разница в 1 год)
"y" Количество полных лет 1 (разница в 1 год)
"yd" Дни без учёта лет 0 (если разница ровно 1 год)

Лайфхак: РАЗНДАТ умеет считать дни с учётом неполных периодов. Например, если начальная дата 31.01.2026, а конечная 28.02.2026, то РАЗНДАТ(A2; B2; "d") вернёт 28, хотя фактическая разница — 29 дней. Это связано с тем, что функция учитывает "календарные" дни, а не фактические.

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

Функция РАЗНДАТ использует алгоритм, аналогичный расчёту возраста человека: она считает полные периоды (годы, месяцы) и остаток. Например, разница между 31.01 и 28.02 будет 28 дней, потому что 28.02 считается "неполным месяцем" относительно 31.01. Для точного подсчёта дней всегда используйте параметр "d" или простую разницу дат.

Метод 3: Рабочие дни (исключаем выходные)

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

=ЧИСТРАБДНИ(A2; B2)

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

=ЧИСТРАБДНИ(A2; B2; "1111100")

где "1111100" — строка из 7 символов (1 — рабочий день, 0 — выходной), начиная с понедельника.

  • 📅 Пример 1: Разница между 01.06.2026 (суббота) и 10.06.2026 (понедельник) = 7 календарных дней, но ЧИСТРАБДНИ вернёт 5 (исключены 1-2 июня и 8-9 июня).
  • ⚙️ Пример 2: Для графика "работаем с понедельника по четверг" используйте "1111000".

Пятидневка (пн-пт)|Шестидневка (выходной только воскресенье)|Сменный график (2/2 или 3/3)|Удаленная работа без фиксированных выходных-->

Метод 4: Учёт праздничных дней (расширенный ЧИСТРАБДНИ.МЕЖД)

Если в вашем регионе есть официальные праздники, которые не попадают на выходные (например, 1 мая или 9 мая в России), используйте функцию ЧИСТРАБДНИ.МЕЖД (англ. NETWORKDAYS.INTL). Она позволяет указать список праздничных дат в виде диапазона ячеек.

Формула:

=ЧИСТРАБДНИ.МЕЖД(A2; B2; [выходные]; D2:D10)

где D2:D10 — диапазон с датами праздников.

Пошаговая инструкция:

  1. Создайте отдельный лист (например, "Праздники") и перечислите там все нерабочие дни.
  2. В основной таблице используйте формулу, ссылаясь на этот диапазон.
  3. Если праздники повторяются ежегодно (например, 1 января), используйте формулу =ДАТА(ГОД(A2);1;1) для автоматического обновления.

Создать отдельный лист "Праздники"|Перечислить все нерабочие даты (включая переносы)|Проверить формат ячеек (должен быть "Дата")|Использовать относительные ссылки для автоматического обновления-->

⚠️ Внимание: Если в списке праздников есть даты, которые совпадают с выходными (например, суббота 4 ноября), они не будут дублироваться в расчётах. Функция автоматически игнорирует повторяющиеся нерабочие дни.

Метод 5: Динамический расчёт от сегодняшней даты (СЕГОДНЯ)

Чтобы посчитать дни от текущей даты до указанной (например, дней до дедлайна), используйте функцию СЕГОДНЯ (англ. TODAY):

=B2-СЕГОДНЯ()

Особенности:

  • 🔄 Автообновление: результат будет меняться каждый день.
  • Отрицательное значение: если дата в B2 уже прошла, формула вернёт отрицательное число (например, -5 означает, что срок истёк 5 дней назад).
  • 📊 Применение: идеально для трекеров задач, канбан-досок или систем напоминаний.

Для подсчёта рабочих дней от сегодня до указанной даты:

=ЧИСТРАБДНИ(СЕГОДНЯ(); B2; D2:D10)

Метод 6: Расчёт дней с учётом времени (дробные дни)

Если ваши даты включают не только день, но и время (например, 01.06.2026 14:30), Excel вернёт дробное число, где целая часть — дни, а дробная — доля суток. Например, разница между 01.06.2026 8:00 и 02.06.2026 20:00 будет 1,5 (1 полный день + 12 часов).

Чтобы преобразовать дробные дни в часы или минуты:

  • 🕒 В часы: = (B2-A2)*24
  • ⏱️ В минуты: = (B2-A2)*24*60
  • ⏲️ В секунды: = (B2-A2)*24*60*60

⚠️ Внимание: При работе с временными метками убедитесь, что ячейки имеют формат "Дата" или "Дата и время". Если формат установлен как "Текст", Excel воспримет значение как строку, и формулы дадут ошибку.

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

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

1. Динамические массивы (Excel 365)

Если нужно посчитать дни между несколькими парами дат одновременно, используйте динамические формулы массива:

=РАЗНДАТ(A2:A100; B2:B100; "d")

Формула автоматически "прольётся" на все строки диапазона.

2. Power Query (для больших данных)

Если даты хранятся в внешнем источнике (например, в базе данных или CSV), импортируйте их через Power Query и добавьте столбец с разницей дат:

  1. Перейдите на вкладку Данные → Получить данные → Из файла.
  2. Загрузите таблицу с датами.
  3. В редакторе Power Query выберите Добавить столбец → Настраиваемый столбец.
  4. Введите формулу: = [Конечная дата] - [Начальная дата].

3. VBA (для нестандартных задач)

Если требуется учитывать плавающие праздники (например, Пасха) или сложные правила (как в производственных календарях), напишите пользовательскую функцию на VBA:

Function WorkDaysWithHolidays(start_date, end_date, holidays_range)

Dim count As Long

Dim day As Date

Dim is_holiday As Boolean

count = 0

For day = start_date To end_date

If Weekday(day, vbMonday) < 6 Then ' Пн-Пт

is_holiday = False

For Each cell In holidays_range

If cell.Value = day Then

is_holiday = True

Exit For

End If

Next cell

If Not is_holiday Then count = count + 1

End If

Next day

WorkDaysWithHolidays = count

End Function

Используйте в Excel как: =WorkDaysWithHolidays(A2; B2; D2:D10).

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

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

Ошибка Причина Решение
#ЗНАЧ! Ячейка содержит текст вместо даты Используйте ДАТАЗНАЧ или измените формат ячейки
#ИМЯ? Опечатка в названии функции Проверьте синтаксис (например, ЧИСТРАБДНИ, а не ЧИСЛОРАБДНЕЙ)
Неверный результат (например, 366 дней вместо 365) Одна из дат введена как текст с неверным разделителем (точка вместо тире) Установите формат ячейки "Дата" и введите дату заново
Формула не обновляется Автоматический пересчёт отключён Перейдите в Формулы → Параметры вычислений → Автоматически

⚠️ Внимание: Если вы работаете с датами до 01.01.1900 (например, исторические данные), Excel их не распознаёт. В этом случае используйте альтернативные системы дат или храните такие даты как текст.

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

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

Используйте трехмерные ссылки. Например, если начальная дата на листе "Лист1" в ячейке A2, а конечная на листе "Лист2" в B2, формула будет:

=Лист2!B2-Лист1!A2

Для функций типа ЧИСТРАБДНИ синтаксис аналогичный:

=ЧИСТРАБДНИ(Лист1!A2; Лист2!B2)
Можно ли посчитать дни с учётом только конкретных дней недели (например, только вторники)?

Да, но стандартных функций для этого нет. Используйте пользовательскую функцию VBA или комбинацию из ЧИСТРАБДНИ и ЕСЛИ:

=СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(ДАТАМЕС(A2;СТРОКА(ДИАПАЗОН($A$1:ИНДЕКС($A:$A;B2-A2)))-1));2)=2);--(СТРОКА(ДИАПАЗОН($A$1:ИНДЕКС($A:$A;B2-A2)))-1<=B2-A2))

Эта формула считает количество вторников между датами. Для других дней недели измените число 2 на:

  • 1 — понедельник
  • 3 — среда
  • 7 — воскресенье
Как посчитать количество полных недель между датами?

Используйте функцию ЦЕЛОЕ (англ. INT) для округления в меньшую сторону:

=ЦЕЛОЕ((B2-A2)/7)

Если нужно посчитать неполные недели как полные (например, 8 дней = 2 недели), используйте ОКРУГЛВВЕРХ:

=ОКРУГЛВВЕРХ((B2-A2)/7;0)
Почему функция ДАТАЗНАЧ не работает с датами в формате "дд.мм.гггг"?

Функция ДАТАЗНАЧ зависит от региональных настроек Excel. Если у вас в системе разделитель даты — точка (.), а в файле — косая черта (/), возникнет ошибка. Решения:

  1. Измените формат даты в исходном файле (например, в CSV).
  2. Используйте ПОДСТАВИТЬ для замены разделителя:
  3. =ДАТАЗНАЧ(ПОДСТАВИТЬ(A2;"/";"."))
  4. Настройте региональные параметры Excel в Файл → Параметры → Дополнительно → Разделители.
Как посчитать дни с учётом только рабочего времени (например, 8 часов в день)?

Для этого нужно:

  1. Посчитать количество рабочих дней (функция ЧИСТРАБДНИ).
  2. Умножить результат на количество рабочих часов в день:
  3. =ЧИСТРАБДНИ(A2; B2) * 8

Если нужно учитывать переработки или неполный рабочий день, создайте дополнительный столбец с коэффициентами и используйте СУММПРОИЗВ.