Как посчитать количество дней в Excel: от базовых операций до продвинутых формул

Работа с датами в Microsoft Excel — одна из самых востребованных задач среди пользователей. Будь то расчёт срока выполнения проекта, определение возраста клиента или анализ временных промежутков между событиями — умение быстро и точно посчитать количество дней между двумя датами экономит часы ручной работы. Однако многие сталкиваются с ошибками: то формула возвращает ошибочное значение, то Excel воспринимает дату как текст, то результат отображается в непонятном формате.

В этой статье мы разберём 7 способов подсчёта дней в Excel — от элементарного вычитания до специализированных функций вроде ДАТАРАЗН и РАЗНДАТ. Вы узнаете, как учитывать выходные, праздники, а также как рассчитать количество рабочих дней или долю года. Все примеры сопровождаются скриншотами и готовыми формулами, которые можно скопировать в вашу таблицу.

Особое внимание уделим типичным ошибкам: почему Excel иногда показывает ###### вместо результата, как исправить формат ячеек и что делать, если даты введены как текст. В конце статьи вы найдёте FAQ-блок с ответами на самые частые вопросы и сравнительную таблицу всех методов — это поможет выбрать оптимальный способ для вашей задачи.

📊 Как часто вы работаете с датами в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

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 дней:

  1. Выделите диапазон с результатами.
  2. Перейдите в Главная → Условное форматирование → Правила выделения ячеек → Больше...
  3. Укажите значение 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").