Сколько дней между датами: формулы Excel для расчета разницы

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

Многие пользователи ошибочно думают, что для вычитания дат достаточно простой арифметики. Однако Excel хранит даты как последовательные числа, где 1 соответствует 1 января 1900 года. Это означает, что даже простая операция =B2-A2 может дать неожиданный результат, если не учитывать формат ячеек. Далее вы узнаете, как избежать типичных ошибок и использовать специализированные функции вроде ДАТАРАЗН или ЧИСТРАБДНИ для точных вычислений.

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

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

Самый простой способ узнать количество дней между двумя датами — вычесть одну дату из другой. В Excel это работает благодаря внутреннему представлению дат как порядковых номеров. Например, если в ячейке A1 указана дата 01.01.2023, а в B110.01.2023, формула =B1-A1 вернет значение 9.

Но здесь есть важный нюанс: формат ячеек должен быть установлен как "Общий" или "Числовой". Если результат отображается как дата (например, 09.01.1900), значит, формат ячейки с результатом нужно изменить. Для этого:

  1. Выделите ячейку с формулой.
  2. Нажмите правой кнопкой мыши и выберите Формат ячеек.
  3. Перейдите на вкладку Число и выберите Общий.

Этот метод подходит для большинства задач, где требуется узнать точную разницу в календарных днях без учета выходных или праздников. Однако он не учитывает временные зоны или специфические календарные особенности (например, переход на летнее время).

Функция ДАТАРАЗН: расчет с учетом месяцев и лет

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

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

где единица_измерения может принимать значения:

  • 📅 "d" — разница в днях;
  • 📆 "m" — разница в полных месяцах;
  • 📅 "y" — разница в полных годах;
  • 📅 "yd" — дни без учета лет;
  • 📅 "md" — дни без учета месяцев и лет.

Пример: формула =ДАТАРАЗН("01.01.2020"; "15.03.2023"; "y") вернет 3 (полных года), а с единицей "yd"73 (дни в 2023 году до 15 марта).

Обратите внимание: ДАТАРАЗН округляет результаты вниз. Например, разница между 31.12.2022 и 01.01.2023 при единице "m" будет 0, хотя прошел 1 день. Это важно учитывать при анализе временных интервалов.

📊 Как часто вы используете функцию ДАТАРАЗН в Excel?
Ежедневно
Несколько раз в неделю
Редико
Никогда не слышал о ней

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

В бизнес-задачах часто требуется посчитать только рабочие дни, исключив выходные (субботу и воскресенье) и праздники. Для этого в Excel есть две ключевые функции:

  1. ЧИСТРАБДНИ (NETWORKDAYS) — возвращает количество рабочих дней между двумя датами;
  2. РАБДЕНЬ (WORKDAY) — добавляет заданное количество рабочих дней к начальной дате.

Синтаксис ЧИСТРАБДНИ:

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

Необязательный аргумент [праздники] — это диапазон ячеек с датами праздников. Например, если в ячейках D1:D5 перечислены праздничные даты, формула примет вид:

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

Пример расчета срока выполнения задачи:

  • 📌 Начало проекта: 01.06.2026;
  • 📌 Дедлайн: 30.06.2026;
  • 📌 Праздники: 12.06.2026 (День России).

Формула =ЧИСТРАБДНИ("01.06.2026"; "30.06.2026"; "12.06.2026") вернет 20 рабочих дней (в июне 2026 года 21 рабочий день минус 1 праздничный).

Как добавить праздники автоматически?

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

Функция РАБДЕНЬ полезна для планирования. Например, чтобы узнать дату завершения задачи через 10 рабочих дней от 01.06.2026 с учетом праздников:

=РАБДЕНЬ("01.06.2026"; 10; D1:D5)

Результат — 17.06.2026 (с учетом выходных и 12 июня).

Расчет возраста: нюансы с датой рождения

Определение возраста по дате рождения — классическая задача, где ДАТАРАЗН показывает себя во всей красе. Однако здесь есть подводные камни:

⚠️ Внимание: Если текущая дата раньше даты рождения, ДАТАРАЗН вернет ошибку. Всегда проверяйте порядок дат с помощью функции =ЕСЛИ(A2>B2; "Ошибка"; ДАТАРАЗН(...)).

Пример формулы для расчета полных лет, месяцев и дней:

=ДАТАРАЗН(A2; СЕГОДНЯ(); "y") & " лет, " & ДАТАРАЗН(A2; СЕГОДНЯ(); "ym") & " мес., " & ДАТАРАЗН(A2; СЕГОДНЯ(); "md") & " дн."

где A2 — ячейка с датой рождения.

Для автоматизации можно создать таблицу с колонками:

Дата рожденияВозраст (полных лет)Дней до следующего ДР
15.05.1990=ДАТАРАЗН(A2;СЕГОДНЯ();"y")=ДАТА(ГОД(СЕГОДНЯ());МЕСЯЦ(A2);ДЕНЬ(A2))-СЕГОДНЯ()
01.01.2000=ДАТАРАЗН(A3;СЕГОДНЯ();"y")=ДАТА(ГОД(СЕГОДНЯ()+1);1;1)-СЕГОДНЯ()

Обратите внимание на второй столбец "Дней до следующего ДР": здесь используется конструкция ДАТА(ГОД(СЕГОДНЯ()+1);...), чтобы корректно обработать случаи, когда день рождения уже прошел в текущем году.

Ошибки и их решения: почему формулы не работают

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

1. Результат отображается как дата, а не число дней

  • 🔹 Причина: Формат ячейки с результатом установлен как "Дата".
  • 🔹 Решение: Измените формат на "Общий" или "Числовой" (правый клик → Формат ячеек).

2. Формула возвращает #ЗНАЧ! или #ЧИСЛО!

  • 🔹 Причина: Одна из "дат" на самом деле текст (например, введена как '01.01.2023 с апострофом).
  • 🔹 Решение: Используйте =ДАТАЗНАЧ() для преобразования текста в дату или проверьте формат ячейки.

3. Неправильный расчет возраста (например, 1 день до ДР показывает 364 дня)

  • 🔹 Причина: Формула не учитывает переход на новый год.
  • 🔹 Решение: Для дней до следующего ДР используйте:
    =ЕСЛИ(ДАТА(ГОД(СЕГОДНЯ());МЕСЯЦ(A2);ДЕНЬ(A2))>СЕГОДНЯ(); ДАТА(ГОД(СЕГОДНЯ());МЕСЯЦ(A2);ДЕНЬ(A2))-СЕГОДНЯ(); ДАТА(ГОД(СЕГОДНЯ()+1);МЕСЯЦ(A2);ДЕНЬ(A2))-СЕГОДНЯ())

⚠️ Внимание: Функция СЕГОДНЯ() пересчитывается при каждом открытии файла. Если нужно зафиксировать текущую дату, замените ее на =СЕГОДНЯ() → скопируйте результат как "Значение" (Ctrl+Shift+V).

Ячейки с датами имеют формат "Дата"|Нет лишних символов (апострофов, пробелов)|Порядок дат корректен (начальная ≤ конечной)|Праздники указаны в отдельном диапазоне (если нужны)

-->

Продвинутые сценарии: динамические диапазоны и условные расчеты

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

1. Расчет дней между датами с учетом только определенных месяцев

Допустим, нужно посчитать дни между 01.01.2026 и 31.12.2026, но только за летние месяцы (июнь-август). Используем:

=СУММПРОИЗВ(--(МЕСЯЦ(СТРОКА(ДАТА(2026;{6;7;8};1):ИНДЕКС(ДАТА(2026;{6;7;8};ДЕНЬ(ДАТА(2026;7;1)-1)):ДАТА(2026;8;31));;)))=МЕСЯЦ(СТРОКА(ДАТА(2026;6;1):ДАТА(2026;8;31)))));1)

Эта формула создает массив дат за июнь-август и считает их количество. Для упрощения можно использовать вспомогательный столбец с датами и функцией СУММЕСЛИ.

2. Подсчет дней между датами с исключением конкретных дней недели

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

=СУММ(--(ДЕНЬНЕД(СТРОКА(А1:В1);2)<6);--(ДЕНЬНЕД(СТРОКА(А1:В1);2)<>4))

где A1 и B1 — начальная и конечная даты, а ДЕНЬНЕД(...,2) возвращает номер дня недели (1=понедельник, 7=воскресенье).

3. Динамический расчет с учетом текущей даты

Для отслеживания времени до дедлайна (например, в проектах) используйте:

=ЕСЛИ(СЕГОДНЯ()>B2; "Просрочено"; ЕСЛИ(ЧИСТРАБДНИ(СЕГОДНЯ();B2)>5; "Время есть"; "Срочно!"))

где B2 — ячейка с дедлайном. Формула вернет:

  • 📛 "Просрочено", если срок истек;
  • 📛 "Время есть", если до дедлайна больше 5 рабочих дней;
  • 📛 "Срочно!", если осталось ≤5 дней.

Автоматизация с помощью Power Query

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

Пример: расчет количества дней между датами заказа и доставки для 1000 строк:

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

Преимущества Power Query:

  • 🔄 Автоматическое обновление при изменении исходных данных;
  • 📊 Возможность добавлять несколько столбцов с разными расчетами (например, дни просрочки, рабочие дни);
  • 🔗 Интеграция с внешними источниками (SQL, CSV, API).

Для сложных календарей (например, с плавающими праздниками) в Power Query можно создать отдельную таблицу с праздничными датами и объединить ее с основными данными по году.

FAQ: Частые вопросы о расчете дней в Excel

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

Используйте функцию ЕСЛИ для проверки заполненности ячейки:

=ЕСЛИ(И(NOT(ISBLANK(A2)); NOT(ISBLANK(B2))); B2-A2; "Данные неполные")

где A2 и B2 — ячейки с датами. Если хотя бы одна ячейка пустая, формула вернет "Данные неполные".

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

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

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

Для точных расчетов лучше использовать специализированные инструменты вроде Python с библиотекой pytz.

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

Используйте функцию =ЦЕЛОЕ((B2-A2)/7), где A2 и B2 — начальная и конечная даты. Для учета неполных недель добавьте =ОСТАТ(B2-A2;7) в отдельной ячейке.

Пример: разница в 15 дней = 2 полных недели и 1 день.

Почему функция ДАТАРАЗН не работает в Excel Online?

Функция ДАТАРАЗН (DATEDIF) доступна во всех версиях Excel, включая Excel Online. Если она не отображается в списке функций, введите ее вручную. Убедитесь, что:

  • 🔹 Даты введены корректно (не как текст);
  • 🔹 Используется правильный синтаксис (точка с запятой ; как разделитель аргументов);
  • 🔹 Единица измерения указана в кавычках (например, "d").
Как посчитать дни между сегодняшней датой и датой в ячейке, если файл открывают на разных компьютерах?

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

  1. Создайте ячейку с формулой =СЕГОДНЯ().
  2. Скопируйте ее (Ctrl+C) и вставьте как значение (Ctrl+Shift+V).
  3. Используйте это значение в расчетах.

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