Введение: зачем считать календарные дни в Excel
Расчёт разницы между датами в календарных днях — одна из самых востребованных задач в Microsoft Excel и Google Таблицах. Без этого не обойтись при планировании проектов, расчёте сроков поставок, определении продолжительности отпусков или анализе временных интервалов. Например, бухгалтеру нужно узнать, сколько дней прошло между датой оплаты и датой получения товара, а менеджеру проекта — посчитать реальное время выполнения задачи без учёта выходных.
Главная сложность заключается в том, что Excel хранит даты как последовательные числа (начиная с 1 января 1900 года), а не в привычном формате. Это означает, что для корректных вычислений требуется не просто вычитание, но и понимание внутренней логики программы. В этой статье разберём все способы подсчёта календарных дней — от базовых формул до учёта праздников и нестандартных календарей.
Отметим, что календарные дни отличаются от рабочих: первые включают все дни недели (включая субботу и воскресенье), а вторые — только будние. Если вам нужны именно рабочие дни, потребуются другие функции, о которых мы упомянем в конце статьи.
Базовый метод: вычитание дат для получения календарных дней
Самый простой способ посчитать разницу между двумя датами в календарных днях — вычесть одну дату из другой. Excel автоматически преобразует результат в количество дней. Например, если в ячейке A1 указана дата начала, а в B1 — дата окончания, формула будет такой:
=B1-A1
Результат может быть как положительным (если дата окончания позже), так и отрицательным (если дата начала позже). Чтобы избежать отрицательных значений, используйте функцию ABS:
=ABS(B1-A1)
Важно: Excel воспринимает даты только в формате, распознаваемом программой. Если вы введёте 31.12.2026 в ячейку с текстовым форматом, формула не сработает. Чтобы исправить это, преобразуйте текст в дату с помощью функции ДАТАЗНАЧ (или DATEVALUE в английской версии).
Функция ДНИ (DAYS): альтернатива вычитанию
Для большей наглядности можно использовать специализированную функцию ДНИ (в английской версии — DAYS). Она возвращает количество дней между двумя датами и имеет простой синтаксис:
=ДНИ(дата_окончания; дата_начала)
Пример: если в ячейке A2 указана дата 01.01.2026, а в B2 — 15.01.2026, формула =ДНИ(B2; A2) вернёт 14. Обратите внимание, что порядок аргументов обратный по сравнению с вычитанием: сначала указывается конечная дата, затем начальная.
Преимущество функции ДНИ в том, что она автоматически игнорирует время (если оно указано в ячейках) и возвращает только целые дни. Это полезно, когда даты вводятся с точностью до часов и минут, но вам нужна разница именно в календарных днях.
⚠️ Внимание: Если одна из дат введена как текст (например,"01.01.2026"вместо01.01.2026), функцияДНИвернёт ошибку#ЗНАЧ!. ИспользуйтеДАТАЗНАЧдля преобразования:=ДНИ(ДАТАЗНАЧ(B2); ДАТАЗНАЧ(A2))Учёт времени в датах: когда календарные дни не равны 24 часам
Excel хранит даты и время как дробные числа, где целая часть — это дата, а дробная — время (например,
12:00соответствует0,5). Если в ваших данных указано не только число, но и время, простая разница между датами может дать нецелое значение. Например:
- 📅
A3=01.01.2026 14:00- 📅
B3=02.01.2026 10:00- ➖ Результат
=B3-A3=1,833...(1 день и 20 часов)Чтобы получить именно календарные дни (игнорируя время), используйте функцию
ЦЕЛОЕ(илиINT):=ЦЕЛОЕ(B3-A3)Если же нужно округлить результат до ближайшего целого дня (например, если разница составляет 23 часа, считать это за полный день), примените функцию
ОКРУГЛВВЕРХ:=ОКРУГЛВВЕРХ(B3-A3; 0)Расчёт календарных дней с учётом текущей даты
Часто требуется посчитать количество дней от определённой даты до сегодняшнего дня. Для этого используйте функцию
СЕГОДНЯ(илиTODAY), которая всегда возвращает текущую дату. Например, чтобы узнать, сколько дней прошло с01.01.2026:=СЕГОДНЯ()-ДАТА(2026;1;1)Функция
СЕГОДНЯдинамическая: она пересчитывается при каждом открытии файла или обновлении листа. Если вам нужно зафиксировать дату на момент первого расчёта, заменитеСЕГОДНЯ()на статическое значение (например,ДАТА(2026;5;20)) или скопируйте результат как значение (Ctrl+Shift+V).Для подсчёта дней до будущей даты (например, до конца года) используйте ту же функцию, но с обратным порядком:
=ДАТА(2026;12;31)-СЕГОДНЯ()⚠️ Внимание: Если файл с функциейСЕГОДНЯ()будет открыт на компьютере с другой датой (например, в другой временной зоне или с неверными настройками системы), результат может оказаться некорректным. Для критичных расчётов фиксируйте дату вручную.
Формула Пример Результат Описание =СЕГОДНЯ()-A1A1=01.01.2026150(если сегодня 30.05.2026)Дни с указанной даты до сегодня =ДАТА(2026;12;31)-СЕГОДНЯ()—215(если сегодня 30.05.2026)Дни до конца 2026 года =ДНИ(СЕГОДНЯ(); A1)A1=15.05.202615Дни с 15.05.2026 до сегодня Продвинутые сценарии: учёт праздников и нестандартных календарей
В некоторых случаях календарные дни нужно считать с учётом праздников или индивидуальных правил. Например, если в вашей компании выходной не только в субботу-воскресенье, но и в пятницу, стандартные функции Excel не подойдут. Решение — создать вспомогательную таблицу с датами праздников и использовать её в формулах.
Допустим, у вас есть список праздников в диапазоне
D1:D10. Чтобы посчитать календарные дни междуA1иB1, исключая праздники, используйте формулу массива:=B1-A1-SУММ(--(МЕЖДУ(D1:D10; A1; B1)))Эта формула работает так:
- Вычисляется общая разница между датами (
B1-A1).- Функция
МЕЖДУ(илиMEDIANв английской версии) проверяет, попадает ли каждая дата из списка праздников (D1:D10) в интервал междуA1иB1.--преобразует значенияИСТИНА/ЛОЖЬв1/0.СУММскладывает все единицы (количество праздников в интервале).- Итоговое значение вычитается из общей разницы.
Для ввода формулы массива в старых версиях Excel нажмите
Ctrl+Shift+Enter. В Excel 365 и Excel 2019 достаточно нажатьEnter.Пример списка праздников для формулы
В списке могут быть как фиксированные даты (например,
01.01.2026— Новый год), так и рассчитываемые (например,=ДАТА(ГОД(A1); 5; 1)— Первомай). Для динамического обновления праздников используйте функцииДАТА,ДЕНЬНЕДиЕСЛИ.Типичные ошибки и как их избежать
При работе с датами в Excel пользователи часто сталкиваются с ошибками, которые искажают результаты. Рассмотрим самые распространённые из них и способы их устранения.
- 🔴 Ошибка
#ЗНАЧ!: возникает, если одна из ячеек содержит текст вместо даты. Проверьте формат ячеек (Формат → Формат ячеек → Дата) или используйтеДАТАЗНАЧ.- 🔴 Некорректная разница из-за времени: если в датах указано время, результат может быть дробным. Используйте
ЦЕЛОЕилиОКРУГЛ.- 🔴 Отрицательные значения: если дата начала позже даты окончания, результат будет отрицательным. Примените
ABSили поменяйте порядок ячеек.- 🔴 Ошибка
#ЧИСЛО!: появляется, если разница между датами превышает допустимый диапазон (Excel поддерживает даты с 1900 по 9999 год).Ещё одна частая проблема — неверное отображение дат из-за региональных настроек. Например, в американском формате
05/06/2026означает 5 июня, а в европейском — 6 мая. Чтобы избежать путаницы, используйте функциюДАТАс явным указанием года, месяца и дня:=ДАТА(2026; 6; 5)Если даты импортируются из внешних источников (например, CSV или SQL), они могут распознаваться как текст. В этом случае поможет комбинация функций
ДАТАЗНАЧиПОДСТАВИТЬ(если формат нестандартный):=ДАТАЗНАЧ(ПОДСТАВИТЬ(A1; "."; "/"))FAQ: ответы на частые вопросы
Можно ли посчитать календарные дни между датами в разных временных зонах?
Excel не учитывает временные зоны при работе с датами. Все расчёты выполняются в локальном времени компьютера. Если вам нужно сравнить даты из разных временных зон, сначала приведите их к одной зоне (например, к UTC) с помощью функций
ЧАС,МИНУТЫи корректировки времени.Как посчитать календарные дни, исключая субботу и воскресенье?
Для этого используйте функцию
ЧИСТРАБДНИ(илиNETWORKDAYSв английской версии). Она возвращает количество рабочих дней между двумя датами. Пример:=ЧИСТРАБДНИ(A1; B1)Если нужно исключить дополнительные праздники, укажите их в третьем аргументе:
=ЧИСТРАБДНИ(A1; B1; D1:D10)Почему формула возвращает дробное число вместо целых дней?
Это происходит, если в ячейках с датами указано время. Чтобы получить целые дни, оберните формулу в
ЦЕЛОЕилиОКРУГЛ. Например:=ЦЕЛОЕ(B1-A1)Если вам нужно учитывать частичные дни как полные, используйте
ОКРУГЛВВЕРХ.Как посчитать количество полных месяцев между датами?
Для этого используйте комбинацию функций
ГОД,МЕСЯЦиДЕНЬ:=((ГОД(B1)-ГОД(A1))*12 + МЕСЯЦ(B1)-МЕСЯЦ(A1)) - ЕСЛИ(ДЕНЬ(B1)<ДЕНЬ(A1); 1; 0)Эта формула учитывает, что месяц считается полным только если день окончания не меньше дня начала.
Можно ли автоматически обновлять даты при изменении данных?
Да, если использовать динамические функции вроде
СЕГОДНЯ()или ссылки на другие ячейки. Однако помните, чтоСЕГОДНЯ()обновляется при каждом открытии файла. Для статических расчётов фиксируйте даты как значения (Специальная вставка → Значения).