Почему стандартные методы не всегда работают
Вы когда-нибудь пробовали в Microsoft Excel вычесть одну дату из другой, чтобы узнать количество дней между ними, но получали результат на единицу меньше ожидаемого? Это классическая ошибка новичков: по умолчанию программа считает разницу между датами, исключая конечную точку. Например, если вам нужно посчитать дни аренды квартиры с 5 по 10 июня, интуитивно хочется получить 6 дней (включая оба числа), но Excel вернёт 5.
Проблема усложняется, когда речь идёт о рабочих днях (исключая выходные) или необходимо учесть праздники. Стандартная функция =ДАТАЗНАЧ() не учитывает эти нюансы, а ручной подсчёт в календаре занимает слишком много времени. В этой статье мы разберём 5 проверенных способов, как правильно посчитать дни между датами включительно, с учётом разных сценариев: от простых календарных дней до сложных расчётов с исключением праздников и индивидуальных выходных.
Особое внимание уделим скрытой функции ДАТАМЕС(), которая позволяет автоматически корректировать конечную дату при добавлении месяцев — это спасает, когда нужно посчитать дни в динамических диапазонах (например, "30 дней с момента заключения договора").
Способ 1: Простая формула для календарных дней
Самый быстрый метод — использовать оператор вычитания с корректировкой на +1. Формула выглядит так:
=КОНДАТА - НАЧДАТА + 1
Где КОНДАТА и НАЧДАТА — это ячейки с конечной и начальной датами соответственно. Например, если в ячейке A2 указана дата начала (01.05.2026), а в B2 — окончания (10.05.2026), формула будет:
=B2 - A2 + 1
Этот метод работает для любых дат, включая пересечение месяцев и лет. Главное — убедиться, что ячейки имеют формат Дата (а не текст!). Проверить это можно в меню Главная → Формат → Формат ячеек.
- ✅ Подходит для любых диапазонов (день, месяц, год)
- ✅ Не требует дополнительных функций
- ⚠️ Не учитывает выходные и праздники
- ⚠️ Может давать ошибку, если даты перепутаны местами (нач. дата > кон. даты)
Способ 2: Функция РАЗНДАТ() для гибких расчётов
Функция РАЗНДАТ() (или DATEDIF в английской версии) — это скрытая "фишка" Excel, которой нет в списке мастер-функций. Она позволяет рассчитывать разницу между датами в днях, месяцах или годах. Для нашего случая (подсчёт дней включительно) синтаксис будет:
=РАЗНДАТ(НАЧДАТА; КОНДАТА; "d") + 1
Аргументы функции:
НАЧДАТА — начальная дата,
КОНДАТА — конечная дата,
"d" — код для вывода результата в днях.
Добавление +1 обеспечивает включение обеих границ диапазона.
Преимущество РАЗНДАТ() в том, что она корректно обрабатывает даже невалидные даты (например, 31 февраля), автоматически корректируя их. Это полезно при работе с данными, где даты могут быть введены с ошибками.
⚠️ Внимание: В некоторых версиях Excel (особенно в Excel Online) функцияРАЗНДАТ()может не работать. В этом случае используйте альтернативу:=ДЕНЬ360(НАЧДАТА; КОНДАТА; ИСТИНА) + 1(но помните, чтоДЕНЬ360приблизительно считает дни, игнорируя реальную длину месяцев).
| Функция | Формула | Пример результата (01.05.2026 – 10.05.2026) |
Учитывает выходные? |
|---|---|---|---|
| Вычитание | =B2-A2+1 |
10 | Нет |
РАЗНДАТ() |
=РАЗНДАТ(A2;B2;"d")+1 |
10 | Нет |
ДЕНЬ360() |
=ДЕНЬ360(A2;B2;ИСТИНА)+1 |
9* | Нет |
ЧИСТРАБДНИ() |
=ЧИСТРАБДНИ(A2;B2)+1 |
8 | Да (исключает субботу-воскресенье) |
* ДЕНЬ360 использует упрощённую модель (30 дней в месяце), поэтому результат может отличаться.
Способ 3: Подсчёт рабочих дней (исключая выходные)
Если вам нужно посчитать только рабочие дни (с понедельника по пятницу), используйте функцию ЧИСТРАБДНИ(). Она автоматически исключает субботу и воскресенье. Чтобы включить обе граничные даты, добавьте +1:
=ЧИСТРАБДНИ(НАЧДАТА; КОНДАТА) + 1
Пример: для диапазона 01.05.2026 (среда) – 10.05.2026 (пятница) формула вернёт 8 дней (включая 1 и 10 мая). Если же конечная дата попадает на выходной (например, 11.05.2026 — суббота), она не будет учтена, даже с +1.
Для учёта индивидуальных выходных (например, если ваша компания работает по графику 2/2) используйте расширенную версию функции:
=ЧИСТРАБДНИ.МЕЖД(НАЧДАТА; КОНДАТА; [Выходные]; [Праздники])
Где:
[Выходные] — номер или строка, обозначающая выходные дни (например, "0000011" для выходных в субботу-воскресенье, или 11 для выходных в понедельник-воскресенье).
[Праздники] — диапазон ячеек с датами праздников (необязательный параметр).
- 📅 Для России типичный код выходных:
"0000011"(суббота-воскресенье) - 🏭 Для сменного графика (например, 2 через 2):
"1010101" - 🎉 Чтобы исключить праздники, создайте отдельный столбец с их датами и укажите его в формуле
Как указать праздники в формуле?
Создайте отдельный столбец (например, D2:D10) и перечислите там даты праздников в формате даты. Затем добавьте этот диапазон в функцию: =ЧИСТРАБДНИ.МЕЖД(A2;B2;"0000011";D2:D10)+1. Excel автоматически исключит эти дни из расчёта.
Способ 4: Учёт праздников и нестандартных выходных
Если в вашем регионе или компании есть дополнительные нерабочие дни (например, 1 мая или корпоративные праздники), стандартные функции не справятся. Здесь поможет комбинация ЧИСТРАБДНИ.МЕЖД() с ручным списком исключений.
Алгоритм действий:
1. Создайте отдельный лист (например, "Праздники") и перечислите там все нерабочие даты в одном столбце.
2. В основной таблице используйте формулу:
=ЧИСТРАБДНИ.МЕЖД(A2; B2; "0000011"; Праздники!$A$2:$A$20) + 1
Где Праздники!$A$2:$A$20 — это абсолютная ссылка на диапазон с датами праздников. Абсолютная ссылка (со знаком $) нужна, чтобы при копировании формулы в другие ячейки диапазон праздников не сдвигался.
Если праздники повторяются ежегодно (например, 8 Марта), можно использовать динамические даты. Для этого создайте вспомогательный столбец с формулами вида:
=ДАТА(ГОД(СЕГОДНЯ()); 3; 8)
Эта формула всегда будет возвращать 8 марта текущего года. Чтобы охватить несколько лет, используйте:
=ДАТА(ГОД(СЕГОДНЯ())-1; 3; 8)
(для прошлого года)
⚠️ Внимание: При работе с динамическими праздниками (например, Пасха или переносимые выходные) придётся обновлять их вручную каждый год. Excel не умеет автоматически рассчитывать подвижные праздники — для этого потребуются сложные пользовательские функции на VBA.
Создать отдельный лист "Праздники"|Перечислить фиксированные даты (1 января, 9 мая и др.)|Добавить формулы для динамических праздников (8 марта текущего года)|Проверить формат ячеек (должен быть "Дата")|Заблокировать лист от изменений (опционально)
-->
Способ 5: Автоматический расчёт с учётом времени
Иногда требуется посчитать не только дни, но и часы/минуты между датами (например, для табеля рабочего времени). В этом случае используйте комбинацию функций ДАТАЗНАЧ() и ВРЕМЗНАЧ():
= (КОНДАТА + КОНВРЕМЯ) - (НАЧДАТА + НАЧВРЕМЯ) + 1
Где:
КОНДАТА и НАЧДАТА — ячейки с датами,
КОНВРЕМЯ и НАЧВРЕМЯ — ячейки с временем (например, 18:00).
Формат ячейки с результатом должен быть [ч]:мм (чтобы часы отображались корректно при превышении 24-х).
Пример: если сотрудник начал работу 01.05.2026 в 09:00 и закончил 02.05.2026 в 18:00, формула вернёт 33:00 (33 часа). Чтобы перевести это в дни с учётом рабочего времени, используйте:
=ЦЕЛОЕ((КОНДАТА + КОНВРЕМЯ - НАЧДАТА - НАЧВРЕМЯ) * 24 / 8) + 1
Здесь 8 — длительность рабочего дня в часах. Формула округлит результат до полных рабочих дней.
Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при работе с датами. Вот самые распространённые:
- Текст вместо даты: Если дата введена как текст (например, скопирована из PDF), Excel не сможет её обработать. Проверяйте формат ячейки и при необходимости используйте
=ДАТАЗНАЧ()для преобразования. - Перепутанные даты: Если начальная дата позже конечной, формула вернёт отрицательное число или ошибку. Добавьте проверку с помощью
=ЕСЛИ():=ЕСЛИ(A2>B2; "Ошибка: даты перепутаны"; B2-A2+1) - Неучтённые високосные годы: Функции вроде
ДЕНЬ360()игнорируют високосные дни. Для точных расчётов используйтеРАЗНДАТ()или простое вычитание. - Ошибки в формате времени: При расчёте часов между датами убедитесь, что ячейка с результатом имеет формат "[ч]:мм", иначе Excel обнулит часы после 24.
Ещё одна ловушка — автоматическое округление. Например, если вычитаете даты с временем (01.05.2026 23:59 и 02.05.2026 00:01), Excel может округлить результат до 1 дня вместо 0,000694 дня (1 минута). Чтобы избежать этого, используйте формат ячейки с большим количеством десятичных знаков.
FAQ: Ответы на частые вопросы
Как посчитать дни между датами в Google Таблицах?
В Google Sheets используйте те же формулы, что и в Excel, но с английскими названиями функций:
=DAYS(B2, A2) + 1— аналог вычитания=DATEDIF(A2, B2, "d") + 1— аналогРАЗНДАТ()=NETWORKDAYS(A2, B2) + 1— аналогЧИСТРАБДНИ()
Для учёта праздников используйте =NETWORKDAYS(A2, B2, Праздники!A2:A10) + 1.
Почему моя формула возвращает ###### вместо результата?
Это происходит, когда:
- Ячейка с результатом слишком узкая — расширьте столбец.
- Результат отрицательный (нач. дата > кон. даты) — проверьте порядок дат.
- Формат ячейки неверный — установите формат "Общий" или "Числовой".
Можно ли посчитать дни между датами без учёта конкретных дней недели (например, исключить среду)?
Да, но для этого потребуется пользовательская функция на VBA или сложная формула массива. Альтернативный вариант:
- Создайте вспомогательный столбец с номерами дней недели (функция
=ДЕНЬНЕД()). - Используйте
=СУММПРОИЗВ()для фильтрации нужных дней.
Пример для исключения среды (день недели = 4):
=СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(ДАТАЗНАЧ($A$1)&":"&ЧИСЛОСТОЛБ(1:1))))<>4); --(СТРОКА(ДАТАЗНАЧ($A$1)&":"&ЧИСЛОСТОЛБ(1:1))<=ДАТАЗНАЧ($B$1)))
Эта формула должна вводиться как формула массива (в Excel нажмите Ctrl+Shift+Enter).
Как посчитать количество полных недель между датами?
Используйте функцию =ЦЕЛОЕ((КОНДАТА - НАЧДАТА)/7). Чтобы включить неполные недели (округление вверх), замените ЦЕЛОЕ на =ОКРВВЕРХ():
=ОКРВВЕРХ((КОНДАТА - НАЧДАТА + 1)/7; 0)
Добавление +1 обеспечивает включение обеих граничных дат.
Можно ли автоматически обновлять даты (например, "сегодня + 30 дней")?
Да, используйте функции СЕГОДНЯ() и ДАТА():
- Текущая дата:
=СЕГОДНЯ() - Дата через 30 дней:
=СЕГОДНЯ()+30 - Последний день месяца:
=ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(СЕГОДНЯ()+1); 0)
Чтобы посчитать дни от текущей даты до будущей включительно:
=ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(СЕГОДНЯ())+1; 0) - СЕГОДНЯ() + 1
Эта формула вернёт количество дней до конца текущего месяца (включая сегодняшний день).