Работа с датами в Microsoft Excel — одна из самых востребованных задач среди пользователей. Будь то расчёт срока выполнения проекта, определение возраста клиента или анализ временных промежутков между событиями — умение быстро и точно посчитать количество дней между двумя датами экономит часы ручной работы. Однако многие сталкиваются с ошибками: то формула возвращает ошибочное значение, то Excel воспринимает дату как текст, то результат отображается в непонятном формате.
В этой статье мы разберём 7 способов подсчёта дней в Excel — от элементарного вычитания до специализированных функций вроде ДАТАРАЗН и РАЗНДАТ. Вы узнаете, как учитывать выходные, праздники, а также как рассчитать количество рабочих дней или долю года. Все примеры сопровождаются скриншотами и готовыми формулами, которые можно скопировать в вашу таблицу.
Особое внимание уделим типичным ошибкам: почему Excel иногда показывает ###### вместо результата, как исправить формат ячеек и что делать, если даты введены как текст. В конце статьи вы найдёте FAQ-блок с ответами на самые частые вопросы и сравнительную таблицу всех методов — это поможет выбрать оптимальный способ для вашей задачи.
1. Простое вычитание дат: базовый метод
Самый очевидный способ посчитать количество дней между двумя датами — вычесть одну дату из другой. Excel автоматически преобразует разницу в количество дней, так как хранит даты в виде последовательных чисел (начиная с 1 января 1900 года, которое равно 1).
Пример формулы:
=B2-A2
где A2 — ячейка с начальной датой, а B2 — с конечной.
Чтобы результат отображался корректно, убедитесь, что обе ячейки имеют формат Дата (Формат ячеек → Числовые форматы → Дата). Если вместо числа дней вы видите дату (например, 01.01.1900), измените формат результата на Общий или Числовой.
⚠️ Внимание: Если в ячейке отображается ######, значит столбец слишком узкий — расширьте его или уменьшите размер шрифта. Это не ошибка формулы, а проблема отображения.
- ✅ Плюсы: Простота и скорость. Не требует знания функций.
- ❌ Минусы: Не учитывает выходные, праздники или рабочие дни. Подходит только для "чистого" подсчёта календарных дней.
Этот метод идеален для задач вроде расчёта срока доставки или времени, прошедшего с момента регистрации клиента. Например, если в A2 указана дата заказа 15.05.2026, а в B2 — дата доставки 20.05.2026, формула вернёт 5 (дней).
2. Функция ДНИ: альтернатива вычитанию
Функция ДНИ (англ. DAYS) появилась в Excel 2013 и позже. Она делает то же самое, что и простое вычитание, но более наглядно и удобно для чтения формул. Синтаксис:
=ДНИ(конечная_дата; начальная_дата)
Пример:
=ДНИ(B2; A2)
Преимущество этой функции в том, что её название само документирует действие. Если вы передадите таблицу коллеге, ему будет проще понять логику расчётов. Однако по скорости работы ДНИ ничем не отличается от вычитания.
- 📅 Когда использовать: В больших таблицах с множеством формул, где важна читаемость.
- 🔄 Аналог в старых версиях: В Excel 2010 и ранее функции
ДНИнет — используйте вычитание.
Обратите внимание: если начальная дата позже конечной, функция вернёт отрицательное число. Это можно использовать для контроля сроков. Например, если результат отрицательный, значит дедлайн уже прошёл.
3. Функция РАЗНДАТ: гибкость для любых задач
Функция РАЗНДАТ (англ. DATEDIF) — одна из самых мощных для работы с датами, но она не документирована в официальной справке Excel. Её синтаксис:
=РАЗНДАТ(начальная_дата; конечная_дата; единица_измерения)
Аргумент единица_измерения определяет, что именно считать:
"d"— количество дней (аналог простого вычитания);"m"— полные месяцы;"y"— полные годы;"ym"— месяцы без учёта лет;"yd"— дни без учёта лет.
Пример: чтобы посчитать дни между 10.01.2026 и 15.03.2026, используйте:
=РАЗНДАТ("10.01.2026"; "15.03.2026"; "d")
Результат: 65 дней.
⚠️ Внимание: ФункцияРАЗНДАТможет давать неожиданные результаты при работе с отрицательными промежутками (когда конечная дата раньше начальной). В таких случаях используйтеАБС(РАЗНДАТ(...)).
Главное преимущество РАЗНДАТ — возможность гибко управлять единицами измерения. Например, чтобы узнать, сколько полных лет и месяцев прошло с даты рождения, комбинируйте:
=РАЗНДАТ(A2; СЕГОДНЯ(); "y") & " лет и " & РАЗНДАТ(A2; СЕГОДНЯ(); "ym") & " месяцев"
Почему РАЗНДАТ не документирована?
Функция РАЗНДАТ была добавлена в Excel для совместимости с Lotus 1-2-3 (популярной ранее программой для работы с таблицами). Microsoft никогда официально не анонсировала её, но она работает во всех версиях Excel, включая последние. Это одна из так называемых "скрытых" функций.
4. Подсчёт рабочих дней: функция ЧИСТРАБДНИ
Если вам нужно посчитать только рабочие дни (исключая субботу и воскресенье), используйте функцию ЧИСТРАБДНИ (англ. NETWORKDAYS):
=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])
Необязательный аргумент [праздники] — это диапазон ячеек с датами праздников, которые также нужно исключить. Например, если в D2:D10 перечислены государственные праздники, формула примет вид:
=ЧИСТРАБДНИ(A2; B2; D2:D10)
Пример расчёта: между 01.01.2026 (понедельник) и 10.01.2026 (среда) с учётом выходных пройдёт 7 рабочих дней (исключая 6 и 7 января — субботу и воскресенье).
- 🏢 Для корпоративных задач: Используйте
ЧИСТРАБДНИ.МЕЖД(англ.NETWORKDAYS.INTL), чтобы настроить собственные выходные (например, пятница и суббота для стран Ближнего Востока). - 📆 Где взять праздники: Скачайте календарь праздников для вашей страны с сайта правительства или создайте свой список в отдельном листе.
Ошибка #ЗНАЧ! часто возникает, если в аргументе [праздники] указаны не даты, а текст. Проверьте формат ячеек с праздничными датами!
5. Расчёт доли года: функция ДОЛЯГОДА
Функция ДОЛЯГОДА (англ. YEARFRAC) возвращает долю года между двумя датами в виде десятичной дроби. Синтаксис:
=ДОЛЯГОДА(начальная_дата; конечная_дата; [базис])
Аргумент [базис] определяет метод расчёта (по умолчанию 0):
0или опущен — американский метод (NASD)30/360;1— фактический/фактический;2— фактический/360;3— фактический/365;4— европейский метод30/360.
Пример: доля года между 01.01.2026 и 01.07.2026 при базисе 1 (фактический/фактический) составит 0,5 (полгода). Формула:
=ДОЛЯГОДА("01.01.2026"; "01.07.2026"; 1)
Эта функция незаменима в финансовых расчётах, например, для определения начисленных процентов по депозиту за часть года. Чтобы получить количество дней, умножьте результат на 365 (или 366 для високосного года):
=ДОЛЯГОДА(A2; B2; 1)*365
⚠️ Внимание: Базис 1 (фактический/фактический) даёт самый точный результат, но может отличаться от других методов на 1-2 дня из-за особенностей подсчёта високосных лет.
6. Динамические расчёты с функцией СЕГОДНЯ
Если вам нужно посчитать дни от фиксированной даты до текущего момента (или наоборот), используйте функцию СЕГОДНЯ (англ. TODAY). Она возвращает текущую дату и обновляется при каждом пересчёте таблицы.
Примеры:
- 📅 Дни с даты до сегодня:
=СЕГОДНЯ()-A2 - ⏳ Дни до будущей даты:
=A2-СЕГОДНЯ() - 🔄 Автоматический возраст:
=ДАТАРАЗН(A2; СЕГОДНЯ(); "y")
Функция СЕГОДНЯ не имеет аргументов и всегда возвращает дату в формате вашей системы. Чтобы результат не обновлялся при открытии файла, скопируйте ячейку с СЕГОДНЯ() и вставьте как Значения (Правая кнопка → Специальная вставка → Значения).
Типичная ошибка: если формула возвращает отрицательное число, значит дата в ячейке A2 позже текущей. Используйте АБС(), чтобы всегда получать положительное значение:
=АБС(СЕГОДНЯ()-A2)
Убедитесь, что ячейка с датой имеет формат "Дата"|Проверьте настройки региона (день/месяц/год)|Используйте АБС(), если важен модуль разницы|Обновляйте таблицу вручную (F9), если автоматический пересчёт отключён-->
7. Продвинутые приёмы: массивы и условные подсчёты
Для сложных задач, где нужно посчитать дни с учётом дополнительных условий, используйте формулы массива или комбинации функций. Например, чтобы найти количество дней между датами только для определённого региона или категории.
Пример: подсчёт дней между датами в A2:B10, но только для строк, где в C2:C10 указан регион "Москва":
=СУММПРОИЗВ((C2:C10="Москва")*(B2:B10-A2:A10))
Внимание: это формула массива — в старых версиях Excel (<2019) её нужно вводить с Ctrl+Shift+Enter.
Ещё один полезный приём — подсчёт дней с группировкой по месяцам или годам. Для этого комбинируйте РАЗНДАТ с МЕСЯЦ() или ГОД():
=ЕСЛИ(ГОД(A2)=2026; РАЗНДАТ(A2; B2; "d"); 0)
Для визуализации результатов используйте условное форматирование. Например, можно выделить красным ячейки, где разница между датами превышает 30 дней:
- Выделите диапазон с результатами.
- Перейдите в
Главная → Условное форматирование → Правила выделения ячеек → Больше... - Укажите значение
30и выберите красный цвет.
| Метод | Формула | Учитывает выходные | Учитывает праздники | Пример результата |
|---|---|---|---|---|
| Простое вычитание | =B2-A2 |
❌ Нет | ❌ Нет | 45 |
Функция ДНИ |
=ДНИ(B2; A2) |
❌ Нет | ❌ Нет | 45 |
Функция РАЗНДАТ |
=РАЗНДАТ(A2; B2; "d") |
❌ Нет | ❌ Нет | 45 |
Функция ЧИСТРАБДНИ |
=ЧИСТРАБДНИ(A2; B2; D2:D10) |
✅ Да | ✅ Да | 32 |
Функция ДОЛЯГОДА |
=ДОЛЯГОДА(A2; B2; 1)*365 |
❌ Нет | ❌ Нет | 45,2 |
FAQ: Ответы на частые вопросы
Почему Excel показывает ###### вместо количества дней?
Это означает, что столбец слишком узкий для отображения результата. Расширьте его или уменьшите размер шрифта. Также проверьте, что ячейка не имеет формат Дата — измените его на Общий или Числовой.
Как посчитать дни между датой и сегодняшним днём, если сегодняшняя дата не обновляется?
Функция СЕГОДНЯ() обновляется автоматически. Если нужно зафиксировать текущую дату, скопируйте ячейку с =СЕГОДНЯ() и вставьте как Значения (правая кнопка → Специальная вставка → Значения).
Можно ли посчитать дни с учётом только рабочих часов?
Excel не имеет встроенной функции для подсчёта рабочих часов, но вы можете создать свою. Например, если рабочий день — 8 часов, умножьте количество рабочих дней на 8: =ЧИСТРАБДНИ(A2; B2)*8.
Как посчитать количество полных недель между датами?
Используйте функцию ЦЕЛОЕ (англ. INT), чтобы разделить количество дней на 7: =ЦЕЛОЕ((B2-A2)/7). Для остатка дней (например, 3 дня сверх полных недель) используйте =ОСТАТ(B2-A2; 7).
Почему РАЗНДАТ даёт неверный результат для отрицательных промежутков?
Функция РАЗНДАТ может вести себя нестабильно, если конечная дата раньше начальной. Используйте АБС(РАЗНДАТ(...)) или поменяйте местами аргументы: =РАЗНДАТ(MIN(A2;B2); MAX(A2;B2); "d").