Microsoft Excel — незаменимый инструмент для работы с датами и временными интервалами. Но даже опытные пользователи иногда сталкиваются с трудностями, когда нужно точно посчитать дни между двумя датами, исключить выходные или учесть производственный календарь. Эта статья поможет разобраться во всех нюансах: от простых арифметических операций до сложных формул с учётом праздничных дней.
Вы научитесь не только базовым приёмам вроде вычитания дат, но и продвинутым техникам: расчёт рабочих дней с учётом индивидуальных графиков, определение количества полных недель между датами, а также автоматизация расчётов с помощью функций ДАТА(), РАЗНДАТ() и ЧИСТРАБДНИ(). Особое внимание уделим типичным ошибкам, которые искажают результаты, и способам их избежать.
Все примеры в статье актуальны для Excel 2016–2023 и Microsoft 365, но большинство формул будут работать и в более ранних версиях (2010–2013). Для пользователей Google Таблиц мы также укажем аналоги функций, где это необходимо.
1. Базовый метод: вычитание дат для расчёта дней
Самый простой способ узнать количество дней между двумя датами — вычесть одну дату из другой. Excel автоматически преобразует результат в числовой формат, где 1 = 1 день. Этот метод работает и для будущих, и для прошедших дат.
Пример:
=B2-A2
где A2 — ячейка с начальной датой, а B2 — с конечной. Если результат отрицательный, это означает, что конечная дата раньше начальной.
- 📅 Формат ячеек: Убедитесь, что обе ячейки имеют формат
Дата(выделите ячейку →Главная → Формат → Формат ячеек → Дата). Иначе Excel воспримет значения как текст. - ⚡ Быстрое форматирование: Нажмите
Ctrl+1(Windows) илиCmd+1(Mac), чтобы открыть окно формата. - 🔄 Отрицательные значения: Если вам нужны только положительные числа, используйте функцию
АБС():=АБС(B2-A2)
Этот метод подходит для большинства задач, но не учитывает выходные и праздники. Если вам нужно исключить нерабочие дни, читайте следующий раздел.
2. Как посчитать только рабочие дни (без выходных)
Для расчёта рабочих дней без учёта субботы и воскресенья используйте функцию ЧИСТРАБДНИ() (в Google Таблицах — NETWORKDAYS). Она автоматически исключает выходные и позволяет добавить список праздничных дней.
Синтаксис:
=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])
где [праздники] — необязательный диапазон ячеек с датами праздников.
| Формула | Пример | Результат |
|---|---|---|
=ЧИСТРАБДНИ("10.01.2026"; "20.01.2026") |
Дни с 10 по 20 января 2026 (без выходных) | 9 |
=ЧИСТРАБДНИ(A2; B2; D2:D5) |
Дни с учётом праздников в ячейках D2:D5 |
Зависит от дат |
=ЧИСТРАБДНИ.МЕЖД("10.01.2026"; "20.01.2026"; 1) |
Рабочие дни + суббота как рабочий день | 11 |
Функция ЧИСТРАБДНИ.МЕЖД() (в Google Таблицах — NETWORKDAYS.INTL) позволяет настраивать, какие дни считать выходными. Например, для графиков работы "2 через 2" или "пятидневки с плавающими выходными".
Как указать нестандартные выходные в ЧИСТРАБДНИ.МЕЖД?
Параметр "[выходные]" в функции ЧИСТРАБДНИ.МЕЖД() задаётся числом от 1 до 11 или строкой из 7 символов (например, "0000011" для выходных в субботу и воскресенье). Примеры:
1— выходные: Сб, Вс (стандарт)11— выходной только Вс"0000011"— выходные: Сб, Вс (аналог 1)"1000001"— выходные: Пн, Вс
⚠️ Внимание: Если в списке праздников есть даты, которые попадают на выходные, функция ЧИСТРАБДНИ() их проигнорирует. Например, если 8 марта выпадает на субботу, указывать его в списке праздников не нужно.
3. Прибавление и вычитание дней к дате
Чтобы сдвинуть дату на определённое количество дней вперёд или назад, просто прибавьте или вычтите число к ячейке с датой. Excel автоматически скорректирует результат.
Примеры:
=A2 + 15
=A2 - 7
Если нужно прибавить рабочие дни (игнорируя выходные), используйте функцию РАБДЕНЬ():
=РАБДЕНЬ(A2; 10)
- 📆 Отрицательные значения: В формуле
РАБДЕНЬ(A2; -5)дата сдвинется на 5 рабочих дней назад. - 🎉 Праздники: Чтобы учесть праздники, добавьте третий аргумент:
=РАБДЕНЬ(A2; 10; D2:D10) - 🔄 Цикличный сдвиг: Если результат выходит за пределы месяца, Excel автоматически перенесёт его на следующий (например, 31 января + 5 дней = 5 февраля).
Для сложных сценариев (например, прибавление месяцев или лет) используйте функцию ДАТАМЕС():
=ДАТАМЕС(A2; 3)
=ДАТАМЕС(A2; -1)
Она автоматически корректирует даты с учётом разной длины месяцев (например, 31 января + 1 месяц = 28/29 февраля).
4. Расчёт дней с учётом праздников и индивидуальных графиков
Если ваша компания работает по нестандартному графику (например, с плавающими выходными или короткой рабочей неделей), стандартные функции Excel могут не подойти. В таких случаях используйте комбинацию функций или создайте пользовательскую функцию на VBA.
Пример для графика "2 через 2" (2 рабочих дня, 2 выходных):
=ЧИСТРАБДНИ.МЕЖД(A2; B2; "0011001")
Здесь строка "0011001" означает:
0— рабочий день1— выходной
То есть выходные приходятся на среду, четверг и воскресенье.
Для учёта производственного календаря России (с официальными праздниками) можно:
- Скачать актуальный календарь с сайта КонсультантПлюс.
- Импортировать даты праздников в отдельный лист Excel.
- Ссылаться на этот диапазон в функции
ЧИСТРАБДНИ().
Создать отдельный лист "Праздники"|Скачать официальный производственный календарь|Вставить даты праздников в столбец A|Присвоить диапазону имя (например, "Праздники_2026")|Использовать имя диапазона в формуле-->
⚠️ Внимание: Если в вашем регионе есть местные праздники (например, День города), не забывайте добавлять их в список вручную. Стандартные функции Excel учитывают только федеральные праздники.
5. Определение количества полных недель, месяцев или лет между датами
Иногда требуется посчитать не дни, а полные недели, месяцы или годы между двумя датами. Для этого используйте функцию РАЗНДАТ() (в Google Таблицах — DATEDIF).
Синтаксис:
=РАЗНДАТ(нач_дата; кон_дата; "код_единицы")
Где "код_единицы" может быть:
"d"— дни"m"— полные месяцы"y"— полные годы"ym"— месяцы без учёта лет"yd"— дни без учёта лет
Примеры:
=РАЗНДАТ("01.01.2023"; "31.12.2023"; "y")
=РАЗНДАТ("01.01.2023"; "01.01.2026"; "y")
=РАЗНДАТ("01.01.2023"; "15.03.2023"; "m")
Для расчёта полных недель используйте комбинацию функций:
=ЦЕЛОЕ((B2-A2)/7)
где ЦЕЛОЕ() округляет результат до ближайшего целого числа вниз.
6. Типичные ошибки и как их избежать
Даже опытные пользователи Excel иногда сталкиваются с неожиданными результатами при работе с датами. Вот самые распространённые ошибки и способы их исправления:
| Ошибка | Причина | Решение |
|---|---|---|
Формула возвращает ###### |
Слишком большая разница между датами или отрицательный результат | Расширьте столбец или используйте АБС() |
Результат #ЗНАЧ! |
Ячейка содержит текст вместо даты | Проверьте формат ячеек (Главная → Формат → Формат ячеек) |
| Неправильное количество рабочих дней | Не указаны праздники или неверный формат дат в списке праздников | Убедитесь, что праздники введены как даты, а не текст |
Функция РАЗНДАТ не работает |
Опечатка в названии функции (например, РАЗНДАТА) |
Введите функцию вручную — автозаполнение для неё не работает |
Ещё одна частая проблема — некорректное отображение дат после импорта данных. Например, дата 01.12.2023 может отобразиться как 12.01.2023, если Excel неправильно определил региональные настройки. Чтобы исправить это:
- Выделите проблемные ячейки.
- Перейдите в
Данные → Текст по столбцам. - На шаге 3 выберите формат
ДМГ(день, месяц, год).
Если вы работаете с историческими датами (до 1900 года), помните, что Excel для Windows поддерживает даты только с 01.01.1900, а для Mac — с 01.01.1904. Для расчётов с более ранними датами потребуется использовать текстовый формат или специализированные надстройки.
7. Автоматизация расчётов: динамические диапазоны и Power Query
Если вам регулярно приходится считать дни между датами в больших таблицах, стоит автоматизировать процесс. Вот несколько продвинутых техник:
1. Динамические именованные диапазоны
Создайте именованный диапазон для праздников, который будет автоматически расширяться при добавлении новых дат:
=СМЕЩ(Лист1!$A$1;0;0;СЧЁТЗ(Лист1!$A:$A);1)
Теперь в формулах можно ссылаться на имя диапазона (например, Праздники) вместо фиксированного адреса.
2. Power Query для импорта производственного календаря
Если праздники хранятся во внешнем файле (например, CSV), импортируйте их через Данные → Получить данные → Из файла. Power Query позволит:
- 🔄 Обновлять список праздников одним кликом.
- 📊 Фильтровать даты по годам или регионам.
- 🔗 Связывать данные с основной таблицей.
3. Пользовательские функции на VBA
Для сложных расчётов (например, учёта сменного графика) создайте собственную функцию. Пример функции, которая считает рабочие дни с учётом индивидуальных выходных:
Function CustomWorkDays(start_date, end_date, weekend_pattern As String) As Integer
' weekend_pattern — строка из 7 символов (0=рабочий, 1=выходной)
' Например, "0000011" для стандартных выходных (сб, вс)
Dim days_count As Integer, i As Integer
days_count = 0
For i = start_date To end_date
If Mid(weekend_pattern, Weekday(i), 1) = "0" Then days_count = days_count + 1
Next i
CustomWorkDays = days_count
End Function
Чтобы использовать её, нажмите Alt+F11, вставьте код в модуль и сохраните файл как .xlsm.
FAQ: Ответы на частые вопросы
Как посчитать дни между датами, если одна из них пустая?
Используйте функцию ЕСЛИ() для проверки заполненности ячеек:
=ЕСЛИ(И(NOT(ISBLANK(A2)); NOT(ISBLANK(B2))); B2-A2; "Данные неполные")
Эта формула вернёт разницу в днях, только если обе даты заполнены. В Google Таблицах замените ISBLANK на ИСПУСТО.
Можно ли посчитать дни с учётом полурабочих дней (например, суббота — короткий день)?
Стандартные функции Excel не поддерживают полурабочие дни. Решения:
- Используйте
ЧИСТРАБДНИ.МЕЖД()с настройкой выходных и вручную корректируйте результат (например, прибавляйте 0.5 дня за каждую субботу). - Создайте пользовательскую функцию на
VBA, которая будет учитывать коэффициенты для полурабочих дней.
Почему функция ЧИСТРАБДНИ игнорирует мои праздники?
Проверьте:
- Формат ячеек с праздниками — они должны быть в формате
Дата, а неТекст. - Диапазон праздников указан корректно (например,
D2:D10, а неD2:D). - В списке нет пустых ячеек или ошибочных значений (например,
32.01.2026).
Чтобы проверить формат, выделите ячейку и посмотрите на строку формул — дата должна отображаться как число (например, 45301 для 01.01.2026).
Как посчитать дни между сегодняшней датой и другой датой?
Используйте функцию СЕГОДНЯ():
=B2-СЕГОДНЯ()
=СЕГОДНЯ()-A2
Чтобы результат обновлялся автоматически, включите пересчёт формул: Формулы → Вычисления → Автоматически.
Можно ли в Excel посчитать дни с учётом часов и минут?
Да, если ячейки имеют формат Дата и время. Например:
= (B2-A2)*24
= (B2-A2)*1440
Чтобы отобразить результат в днях, часах и минутах, используйте формат ячейки [ч]:мм:сс или создайте пользовательский формат:
д "дней" ч:мм