Работа с датами в Microsoft Excel — одна из самых востребованных задач, особенно когда речь идёт о расчёте сроков, планировании проектов или анализе временных интервалов. Часто пользователям нужно узнать, сколько календарных дней прошло между двумя датами, сколько дней осталось до дедлайна или как исключить выходные из расчётов. На первый взгляд задача кажется простой, но Excel предлагает несколько способов её решения — от базовых функций до продвинутых формул с учётом праздников и рабочих графиков.
Многие ошибочно думают, что достаточно вычесть одну дату из другой, но такой подход работает не всегда. Например, если нужно посчитать только рабочие дни или учитывать конкретные праздничные даты, потребуются специальные функции. В этой статье мы разберём все возможные сценарии: от простого вычитания до сложных формул с РАЗНДАТ, ЧИСТРАБДНИ и даже пользовательскими функциями на VBA. Вы узнаете, как избежать типичных ошибок и автоматизировать расчёты для любых задач — от личного планирования до корпоративной отчётности.
———
Базовый метод: вычитание дат для расчёта календарных дней
Самый простой способ посчитать количество дней между двумя датами — вычесть одну из другой. Excel хранит даты в виде последовательных чисел (начиная с 1 января 1900 года), поэтому арифметические операции с ними работают интуитивно.
Допустим, у вас есть две даты в ячейках A1 (нач. дата) и B1 (кон. дата). Формула будет выглядеть так:
=B1-A1
Результат — количество полных календарных дней между датами. Например, если в A1 стоит 01.01.2026, а в B1 — 10.01.2026, Excel вернёт 9 (а не 10, так как считаются дни между датами, без включения конечной).
- ✅ Плюсы: максимальная простота, не требует знания функций.
- ❌ Минусы: не учитывает рабочие/выходные дни, праздники, формат ячеек.
⚠️ Внимание: Если в ячейках не установлен форматДата, Excel воспримет их как текст, и формула вернёт ошибку#ЗНАЧ!. Проверьте формат черезГлавная → Формат → Формат ячеек → Дата.
———
Функция РАЗНДАТ: универсальный инструмент для временных интервалов
Для более гибких расчётов используйте функцию РАЗНДАТ (англ. DATEDIF). Она позволяет вычислять разницу между датами не только в днях, но и в месяцах или годах. Синтаксис:
=РАЗНДАТ(нач_дата; кон_дата; "единица_измерения")
Аргумент единица_измерения может принимать значения:
- 📅
"d"— дни (календарные); - 📆
"m"— полные месяцы; - 🗓️
"y"— полные годы.
Пример: =РАЗНДАТ(A1; B1; "d") вернёт то же, что и B1-A1, но с учётом формата. Главное преимущество РАЗНДАТ — она корректно обрабатывает отрицательные значения (если конечная дата раньше начальной).
| Формула | Нач. дата | Кон. дата | Результат |
|---|---|---|---|
=РАЗНДАТ(A2; B2; "d") |
01.01.2026 | 31.01.2026 | 30 |
=РАЗНДАТ(A3; B3; "m") |
15.02.2026 | 10.05.2026 | 2 |
=РАЗНДАТ(A4; B4; "y") |
01.12.2023 | 01.01.2026 | 1 |
⚠️ Внимание: Функция РАЗНДАТ не документирована в официальной справке Excel, но работает во всех версиях программы. В Excel 365 её можно найти через автозаполнение, в более старых версиях — вводить вручную.
———
Как исключить выходные дни: функция ЧИСТРАБДНИ
Если вам нужно посчитать только рабочие дни (исключая субботу и воскресенье), используйте функцию ЧИСТРАБДНИ (англ. NETWORKDAYS). Она автоматически пропускает выходные и опционально позволяет указать праздничные даты.
Базовый синтаксис:
=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])
Пример: =ЧИСТРАБДНИ("01.01.2026"; "10.01.2026") вернёт 7 (из 9 календарных дней вычитаются 2 выходных: 6 и 7 января).
Чтобы исключить также праздники, передайте их как диапазон ячеек или массив. Например, если праздники перечислены в D1:D5:
=ЧИСТРАБДНИ(A1; B1; D1:D5)
- 🏢 Для корпоративных задач: создайте отдельный лист с перечнем праздников на год и ссылайтесь на него в формуле.
- 🔄 Динамическое обновление: если праздники меняются ежегодно, используйте
ИМПОРТДАННЫХдля автоматического обновления списка.
———
Учёт нестандартных выходных и сменных графиков
Если ваша неделя отличается от стандартной (например, выходные — пятница и суббота), используйте функцию ЧИСТРАБДНИ.МЕЖД (англ. NETWORKDAYS.INTL). Она позволяет задать собственные параметры выходных.
Синтаксис:
=ЧИСТРАБДНИ.МЕЖД(нач_дата; кон_дата; [выходные]; [праздники])
Аргумент [выходные] кодируется числом от 1 до 17 или строкой из 7 символов (1 — рабочий день, 0 — выходной). Примеры:
- 📅
1— выходные: суббота, воскресенье (стандарт); - 📅
11— выходные: воскресенье, понедельник; - 📅
"0000011"— выходные: пятница, суббота (как в ОАЭ).
Пример для графиков "2 через 2":
=ЧИСТРАБДНИ.МЕЖД(A1; B1; "0011001")
⚠️ Внимание: Если в аргументе[выходные]указать некорректное значение (например,18или строку длиной ≠7), Excel вернёт ошибку#ЧИСЛО!.
Уточните график работы вашей организации|Создайте список праздничных дат|Проверьте формат ячеек с датами|Тестируйте формулу на небольшом интервале-->
———
Продвинутые сценарии: расчёт дней с учётом праздников и полурабочих дней
Для сложных задач (например, учёта полурабочих дней или региональных праздников) стандартных функций может не хватить. В таких случаях поможет комбинация формул или пользовательские функции на VBA.
Способ 1: Комбинация ЧИСТРАБДНИ и ДЕНЬНЕД
Если нужно посчитать дни, исключая конкретные дни недели (например, среды), используйте:
=ЧИСТРАБДНИ(A1; B1) - СЧЁТЕСЛИМ(ДЕНЬНЕД(ПОСЛЕДОВАТ(А1; В1-А1)); 4)
Здесь 4 — код среды (1 — воскресенье, 2 — понедельник и т.д.).
Способ 2: VBA-функция для гибких правил
Если праздники или выходные определяются динамически (например, "последний понедельник мая"), создайте пользовательскую функцию:
Function CustomWorkdays(start_date, end_date, holidays_range)
' Логика учёта праздников и нестандартных выходных
' ...
End Function
В Excel 365 доступна функция ПОСЛЕДОВАТ (англ. SEQUENCE), которая упрощает генерацию диапазонов дат для анализа.
Пример VBA-кода для учёта плавающих праздников
Function IsHoliday(d As Date) As Boolean
' Проверяет, является ли дата праздником (например, Пасха)
IsHoliday = (Weekday(d, vbMonday) = 1 And Day(d) > 20 And Month(d) = 4) ' Пример: "последний понедельник апреля"
End Function
———
Типичные ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с ошибками при работе с датами. Вот наиболее распространённые:
- Текст вместо даты: Если ячейка содержит текст (например,
"01.01.2026"вместо даты), формулы вернут ошибку. Решение: используйтеДАТАЗНАЧдля преобразования:=РАЗНДАТ(ДАТАЗНАЧ(A1); ДАТАЗНАЧ(B1); "d") - Неправильный формат результата: Excel может отобразить разницу дней как дату (например,
09.01.1900вместо9). Решение: примените форматОбщийк ячейке с результатом. - Пропущенные праздники: Функция
ЧИСТРАБДНИне учитывает праздники автоматически — их нужно указывать вручную.
Проверьте корректность расчётов с помощью тестовых данных:
- 🧪 Сравните результат формулы с ручным подсчётом для небольшого интервала.
- 🔍 Используйте
УСЛОВНОЕ ФОРМАТИРОВАНИЕ, чтобы выделить выходные дни в диапазоне.
———
Практические примеры: задачи из реальной жизни
Рассмотрим, как применять изученные функции на практике.
Пример 1: Расчёт срока доставки
Задача: Клиент заказал товар 5 марта, срок доставки — 10 рабочих дней. Нужно узнать дату получения.
Решение: Используйте РАБДЕНЬ (англ. WORKDAY):
=РАБДЕНЬ("05.03.2026"; 10)
Результат: 19.03.2026 (учитываются только рабочие дни).
Пример 2: Контроль дедлайнов в проекте
Задача: Узнать, сколько рабочих дней осталось до 30 июня, исключая праздники (1 мая, 9 мая).
Решение:
=ЧИСТРАБДНИ(СЕГОДНЯ(); "30.06.2026"; {"01.05.2026"; "09.05.2026"})
Пример 3: Анализ временных затрат
Задача: Посчитать, сколько дней в среднем занимает выполнение задачи по данным за последний год.
Решение: Комбинация СРЗНАЧ и РАЗНДАТ:
=СРЗНАЧ(РАЗНДАТ(B2:B100; A2:A100; "d"))
———
FAQ: Ответы на частые вопросы
Как посчитать дни между датами, если одна из них пустая?
Используйте функцию ЕСЛИ для проверки заполненности ячеек:
=ЕСЛИ(И(NOT(ISBLANK(A1)); NOT(ISBLANK(B1))); B1-A1; "Данные неполные")
Можно ли посчитать дни с учётом полурабочих (например, суббота — короткий день)?
Стандартных функций для этого нет, но можно создать пользовательскую VBA-функцию или использовать комбинацию ЧИСТРАБДНИ.МЕЖД с ручной корректировкой. Например:
=ЧИСТРАБДНИ.МЕЖД(A1; B1; "0010011") + СЧЁТЕСЛИМ(ДЕНЬНЕД(ПОСЛЕДОВАТ(A1; B1-A1)); 7)/2
Здесь к рабочим дням добавляется половина суббот.
Почему РАЗНДАТ возвращает ошибку #ИМЯ?
Вероятные причины:
- Опечатка в названии функции (правильно:
РАЗНДАТ, а неРАЗНИЦАДАТ). - Локаль Excel настроена на другой язык (попробуйте
DATEDIF). - Аргументы переданы неверно (например, текст вместо даты).
Как посчитать дни между сегодняшней датой и будущей?
Используйте СЕГОДНЯ():
=РАЗНДАТ(СЕГОДНЯ(); "31.12.2026"; "d")
Чтобы результат обновлялся автоматически, нажмите F9.
Можно ли в Excel посчитать дни с учётом летнего времени?
Excel не учитывает переход на летнее/зимнее время, так как оперирует только календарными датами без привязки к часовым поясам. Для точных расчётов с временем используйте ВРЕМЯ или Power Query.