Расчёт количества дней между датами — одна из самых востребованных операций в Microsoft Excel и Google Таблицах. Без этого не обойтись при планировании проектов, учёте рабочего времени, анализе сроков выполнения задач или даже при составлении личного бюджета. Казалось бы, что может быть проще: вычесть одну дату из другой? Но на практике пользователи сталкиваются с десятками нюансов: как исключить выходные, учесть праздники, посчитать только рабочие дни или, наоборот, выделить выходные? А что если даты записаны в нестандартном формате или хранятся в разных ячейках?
Эта статья покрывает все сценарии — от элементарных арифметических операций до продвинутых формул с учётом производственного календаря. Мы разберём 5 основных методов подсчёта дней, покажем, как избежать типичных ошибок (например, с отрицательными значениями или текстом вместо дат), и дадим готовые шаблоны для бухгалтеров, менеджеров проектов и HR-специалистов. Особое внимание уделим функциям ДАТАЗНАЧ, РАЗНДАТ и ЧИСТРАБДНИ, которые часто используют неправильно.
1. Базовый метод: простое вычитание дат
Самый очевидный способ узнать разницу между двумя датами — вычесть их друг из друга. Excel автоматически преобразует даты в порядковые номера (начиная с 1 января 1900 года), поэтому операция работает даже без специальных функций.
Пример: если в ячейке A1 указана дата начала проекта 15.05.2026, а в B1 — дата окончания 30.05.2026, достаточно ввести в C1 формулу:
=B1-A1
Результат — 15 (количество дней между датами). Но здесь есть подводные камни:
- 🔹 Формат ячеек: если даты отображаются как текст (например,
15-мая-2026), Excel не распознаёт их как даты. Исправьте формат черезГлавная → Формат → Формат ячеек → Дата. - 🔹 Отрицательные значения: если дата окончания раньше начальной, результат будет отрицательным. Чтобы избежать этого, используйте
=АБС(B1-A1). - 🔹 Время в датах: если в ячейках указано не только число, но и время (например,
15.05.2026 14:30), разница будет дробной (например,15,5дня).
2. Функция ДАТАЗНАЧ: когда даты записаны как текст
Частая проблема — даты импортируются из внешних источников (например, 1С или CRM-систем) в текстовом формате. Например, вместо 15.05.2026 вы видите "15/05/2026" или "May 15, 2026". В этом случае простое вычитание не сработает — нужна функция ДАТАЗНАЧ (или DATEVALUE в английской версии).
Синтаксис:
=ДАТАЗНАЧ("15/05/2026")
Пример для двух ячеек с текстом:
=ДАТАЗНАЧ(B1)-ДАТАЗНАЧ(A1)
Важно: ДАТАЗНАЧ не работает с датами в формате ДД-ММ-ГГГГ (через дефис) или если день/месяц указаны словами (например, "15 мая"). В таких случаях используйте комбинацию функций ПСТР, НАЙТИ и ДАТА:
Формула для нестандартных форматов дат
=ДАТА(
ПСТР(A1; НАЙТИ(" "; A1)+1; 4); -- год
ПОИСКПОЗ(
ЛЕВСИМВ(ПСТР(A1; 1; НАЙТИ(" "; A1)-1)); -- месяц
{"января";"февраля";...;"декабря"}; 0
);
ЛЕВСИМВ(ПСТР(A1; 1; НАЙТИ(" "; A1)-1)) -- день
)
Эта формула преобразует текст вида "15 мая 2026" в дату.
⚠️ Внимание: если после примененияДАТАЗНАЧрезультат отображается как######, расширьте столбец — это означает, что ширина ячейки недостаточна для отображения даты.
3. Функция РАЗНДАТ: расширенные возможности
Функция РАЗНДАТ (или DATEDIF в английской версии) позволяет гибко управлять подсчётом дней, месяцев или лет между датами. Её главное преимущество — возможность указать единицу измерения (дни, месяцы, годы) и метод расчёта (полные периоды или с округлением).
Синтаксис:
=РАЗНДАТ(начальная_дата; конечная_дата; единица_измерения)
Аргумент единица_измерения может принимать значения:
| Значение | Описание | Пример результата |
|---|---|---|
"D" | Полное количество дней | =РАЗНДАТ("1.01.2026"; "15.01.2026"; "D") → 14 |
"M" | Полное количество месяцев | =РАЗНДАТ("1.01.2026"; "1.03.2026"; "M") → 2 |
"Y" | Полное количество лет | =РАЗНДАТ("1.01.2020"; "1.01.2026"; "Y") → 4 |
"YM" | Месяцы без учёта лет | =РАЗНДАТ("1.01.2026"; "15.03.2026"; "YM") → 2 |
"MD" | Дни без учёта месяцев и лет | =РАЗНДАТ("1.01.2026"; "15.01.2026"; "MD") → 14 |
Особенность РАЗНДАТ: она не документирована в справочной системе Excel, но работает во всех версиях. Чтобы избежать ошибок, всегда указывайте даты как ссылки на ячейки, а не как текст:
=РАЗНДАТ(A1; B1; "D") -- правильно
=РАЗНДАТ("1.01.2026"; "15.01.2026"; "D") -- работает, но не рекомендуется
4. Подсчёт рабочих дней: функция ЧИСТРАБДНИ
Для расчёта рабочих дней (исключая субботы, воскресенья и праздники) используйте функцию ЧИСТРАБДНИ (или NETWORKDAYS). Она учитывает стандартную 5-дневную рабочую неделю и позволяет добавить список праздничных дней.
Синтаксис:
=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])
Пример: подсчитать рабочие дни между 01.06.2026 и 15.06.2026, исключая 12.06.2026 (День России):
=ЧИСТРАБДНИ("01.06.2026"; "15.06.2026"; "12.06.2026")
Для массовых расчётов удобно хранить праздники в отдельном диапазоне (например, D1:D10):
=ЧИСТРАБДНИ(A1; B1; D1:D10)
Если вам нужно, наоборот, посчитать количество выходных и праздников, используйте разницу между полным количеством дней и рабочими днями:
=B1-A1-ЧИСТРАБДНИ(A1; B1; D1:D10)
📅 Убедитесь, что начальная дата раньше конечной
📊 Праздники указаны в отдельном столбце (по одной дате в ячейке)
🔄 Формат ячеек с датами — "Дата" (не "Текст")
📌 Диапазон праздников не содержит пустых ячеек между датами-->
⚠️ Внимание: функцияЧИСТРАБДНИ.МЕЖД(в английской версииNETWORKDAYS.INTL) позволяет настроить выходные дни. Например, для 6-дневной рабочей недели (выходной только воскресенье) используйте:=ЧИСТРАБДНИ.МЕЖД(A1; B1; 11; D1:D10)где
11— код для выходного дня (воскресенье).
5. Продвинутые сценарии: бухгалтерские дни, часы, минуты
В финансовом учёте или логистике часто требуется посчитать не просто дни, а банковские дни (исключая праздники и выходные) или даже часы/минуты. Для этого комбинируйте функции:
- 💰 Банковские дни: используйте
ЧИСТРАБДНИс расширенным списком праздников (включая переносы выходных). Пример для России: добавьте в диапазон праздников даты из производственного календаря. - ⏱️ Часы между датами: умножьте разницу в днях на 24:
=(B1-A1)*24Для учёта рабочих часов (например, 8 часов в день):
=ЧИСТРАБДНИ(A1; B1)*8 - ⏳ Минуты/секунды: аналогично умножайте на 1440 (минуты в дне) или 86400 (секунды в дне).
Для точных расчётов с учётом времени (например, 15.05.2026 14:30) используйте функцию ВРЕМЗНАЧ:
=ДАТАЗНАЧ("15.05.2026")+ВРЕМЗНАЧ("14:30:00")
Критичный нюанс: при работе с временными метками Excel может округлять результаты. Чтобы избежать погрешностей, используйте формат ячейки "Общий" или "[ч]:мм:сс" для отображения полных часов (например, 25:30:00 вместо 1:30:00).
6. Типичные ошибки и как их избежать
Даже опытные пользователи допускают ошибки при подсчёте дней. Вот самые распространённые:
- 📅 Несоответствие форматов: даты в формате
ДД-ММ-ГГГГ(через дефис) не распознаются как даты. Решение: замените дефисы на точки или используйтеДАТАЗНАЧ. - 🔢 Отрицательные результаты: если конечная дата раньше начальной, используйте
АБСили поменяйте ячейки местами. - 🌍 Региональные настройки: в американском Excel даты по умолчанию в формате
ММ/ДД/ГГГГ. Если вы работаете с международными данными, используйтеДАТАдля явного указания дня/месяца/года:=ДАТА(2026; 5; 15) -- 15 мая 2026 - 📊 Пустые ячейки: если в диапазоне праздников есть пустые ячейки,
ЧИСТРАБДНИвернёт ошибку. Решение: очистите диапазон или используйтеЕСЛИОШИБКА.
Проверьте себя: если ваша формула возвращает #ЗНАЧ!, скорее всего, одна из "дат" на самом деле текст. Используйте ЕТЕКСТ для диагностики:
=ЕТЕКСТ(A1)
Если результат ИСТИНА — данные в текстовом формате.
7. Автоматизация: динамические расчёты и условное форматирование
Чтобы подсчёт дней обновлялся автоматически, используйте динамические диапазоны и именованные формулы. Например, для отслеживания просроченных задач:
- Создайте столбец с датой дедлайна (например,
C2:C100). - В соседнем столбце введите формулу:
=ЕСЛИ(C2 - Примените условное форматирование:
Главная → Условное форматирование → Правила выделения ячеек → Текст содержит → "Просрочено"и выберите красный цвет.
Для сложных проектов с несколькими этапами используйте сводные таблицы:
- Создайте таблицу с колонками:
Название задачи,Дата начала,Дата окончания,Статус. - Добавьте вычисляемый столбец с формулой:
=ЧИСТРАБДНИ([Дата начала]; [Дата окончания]) - Постройте сводную таблицу, где строки — названия задач, а значения — сумма рабочих дней.
Для визуализации используйте гистограммы с накоплением, где по оси X — задачи, а по оси Y — дни. Это поможет быстро оценить распределение времени между этапами.
FAQ: Ответы на частые вопросы
Как посчитать дни между сегодняшней датой и датой в ячейке?
Используйте функцию ТДАТА (или TODAY), которая всегда возвращает текущую дату:
=ТДАТА()-A1
Для рабочих дней:
=ЧИСТРАБДНИ(A1; ТДАТА())
Можно ли посчитать дни с учётом полурабочих дней (например, суббота — короткий день)?
Стандартные функции Excel не поддерживают полурабочие дни. Решения:
- Создайте отдельный столбец с коэффициентами (например,
1для полного дня,0.5для полудня) и умножайте результатЧИСТРАБДНИна этот коэффициент. - Используйте VBA для создания кастомной функции (требует навыков программирования).
Почему моя формула возвращает ###### вместо числа?
Это означает, что:
- Ширина столбца недостаточна — расширьте его.
- Результат отрицательный, а формат ячейки — "Дата" (Excel не может отобразить отрицательную дату). Измените формат на "Общий".
- В формуле ошибка (например, текст вместо даты). Проверьте аргументы с помощью
ЕТЕКСТ.
Как посчитать дни между датами в Google Таблицах?
Формулы идентичны Excel, но есть нюансы:
- Функция
ДАТАЗНАЧназываетсяDATEVALUE. - Для
РАЗНДАТиспользуйтеDATEDIF(она документирована в справочной системе Google). - Формат дат по умолчанию зависит от языковых настроек аккаунта.
Можно ли посчитать дни с учётом часового пояса?
Excel не поддерживает часовые пояса напрямую. Решения:
- Приведите все даты к одному часовому поясу перед расчётом (например, с помощью
=A1 + (3/24)для добавления 3 часов). - Используйте надстройки вроде Power Query для преобразования временных меток.
- Для критичных задач (например, в авиации или логистике) используйте специализированное ПО.