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

Зачем считать дни в Excel и какие ошибки поджидают новичков

Расчёт разницы между датами в Microsoft Excel — одна из самых востребованных операций в бизнесе, бухгалтерии и личной аналитике. Казалось бы, что может быть проще: взять две даты и вычесть одну из другой? Но на практике даже опытные пользователи сталкиваются с неожиданными результатами: вместо чисел появляются странные коды дат (например, 45678), отрицательные значения или ошибки #ЗНАЧ!. Всё дело в том, что Excel хранит даты не как текст, а как последовательные числа, где 1 января 1900 года — это единица.

Представьте: вы ведёте учёт дебиторской задолженности и нужно узнать, сколько дней просрочена оплата по контракту. Или планируете проект, где критично учитывать только рабочие дни, исключая выходные и праздники. А может, вам нужно посчитать возраст клиентов по дате рождения для сегментации базы? В каждом из этих случаев подход к расчёту будет разным. Ошибка в формуле может привести к искажению отчётности или срыву сроков — например, если забыть, что функция ДАТАЗНАЧ воспринимает месяцы как числа от 1 до 12, а не от 01 до 12.

Базовый метод: простое вычитание дат

Самый очевидный способ — вычесть одну дату из другой. Если в ячейке A1 у вас начальная дата (например, 01.01.2026), а в B1 — конечная (15.01.2026), то формула будет такой:

=B1-A1

Excel автоматически вернёт разницу в днях. Но здесь есть подводные камни:

  • 🔹 Если ячейки отформатированы как текст, формула вернёт ошибку или некорректное число. Проверьте формат через Главная → Формат → Формат ячеек → Дата.
  • 🔹 При вычитании "большей" даты из "меньшей" результат будет отрицательным. Это нормально, если вам нужна абсолютная разница — используйте =ABS(B1-A1).
  • 🔹 Если даты введены вручную без разделителей (например, 01012026 вместо 01.01.2026), Excel может воспринять их как числа.

Функция ДНИ: когда нужна точность

Для надёжности вместо простого вычитания лучше использовать специализированную функцию =ДНИ(конечная_дата; начальная_дата). Она гарантированно вернёт разницу в полных днях, даже если даты хранятся в разных форматах. Синтаксис:

=ДНИ(B1; A1)

Преимущества этого метода:

  • 📅 Работает с датами в любом регионе (например, MM/DD/YYYY или DD.MM.YYYY).
  • ⚡ Быстрее обрабатывает большие массивы данных (важно для таблиц с тысячами строк).
  • 🛡️ Меньше риск ошибок при изменении формата ячеек.

Однако ДНИ не учитывает время. Если в ваших ячейках указаны не только даты, но и часы (например, 01.01.2026 14:30), функция округлит результат до полных суток. Для точного расчёта с учётом времени используйте =B1-A1 и настройте формат ячейки как [ч]:мм.

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

Расчёт рабочих дней: исключаем выходные и праздники

Если вам нужно посчитать только рабочие дни (например, для расчёта сроков доставки или выполнения задач), используйте функцию =ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники]). Она автоматически исключает субботы и воскресенья, а также позволяет указать дополнительные праздничные дни.

Пример: подсчитаем рабочие дни между 01.01.2026 и 10.01.2026, исключив 1, 2, 7 и 8 января (новогодние каникулы):

=ЧИСТРАБДНИ(A1; B1; {"01.01.2026"; "02.01.2026"; "07.01.2026"; "08.01.2026"})

Обратите внимание:

  • 📌 Праздники указываются как массив дат в фигурных скобках {} (в английской версии Excel — через точку с запятой).
  • 📌 Если праздники хранятся в отдельном диапазоне (например, D1:D4), используйте =ЧИСТРАБДНИ(A1; B1; D1:D4).
  • 📌 Функция не учитывает региональные особенности (например, в некоторых странах выходной — пятница).

Убедитесь, что даты в формате даты, а не текста|Проверьте список праздников на актуальность|Исключите из расчёта дни, когда компания не работала по другим причинам (например, технические неполадки)|Сравните результат с календарём для точности-->

Разница в месяцах и годах: функции РАЗНДАТ и альтернативы

Чтобы узнать разницу между датами в месяцах или годах, используйте функцию =РАЗНДАТ(нач_дата; кон_дата; "код"). Она возвращает разницу в выбранных единицах:

Код Значение Пример результата для 01.01.2023 и 15.03.2026
"y" Полные годы 1
"m" Полные месяцы 14
"d" Дни (игнорирует месяцы и годы) 14
"ym" Месяцы без учёта лет 2
"md" Дни без учёта месяцев и лет 14

Пример: =РАЗНДАТ(A1; B1; "m") вернёт количество полных месяцев между датами. Однако у РАЗНДАТ есть ограничение: она не работает в Excel Online и некоторых локализованных версиях. Альтернатива — формула:

=ГОД(B1)-ГОД(A1)-ЕСЛИ(ИЛИ(МЕСЯЦ(B1)<МЕСЯЦ(A1); И(МЕСЯЦ(B1)=МЕСЯЦ(A1); ДЕНЬ(B1)<ДЕНЬ(A1))); 1; 0)
Почему РАЗНДАТ может давать неточные результаты?

Функция округляет разницу до полных единиц. Например, между 31.01.2026 и 01.03.2026 по коду "m" будет 1 месяц, хотя фактически прошло 30 дней. Для точного расчёта комбинируйте РАЗНДАТ с другими функциями или используйте условные формулы.

Продвинутые приёмы: динамические диапазоны и условный подсчёт

Иногда нужно посчитать дни между датами с дополнительными условиями. Например:

  • 📊 Подсчитать количество дней, когда температура была выше нормы (даты в одном столбце, температуры — в другом).
  • 📈 Найти разницу между датами только для определённого региона или категории.
  • 🔄 Автоматически обновлять расчёт при добавлении новых строк.

Для таких задач комбинируйте функции ЕСЛИ, СУММЕСЛИ и ДНИ. Пример: подсчитаем дни между датами в столбцах A и B, но только если в столбце C стоит "Да":

=ЕСЛИ(C1="Да"; ДНИ(B1; A1); 0)

Для динамических диапазонов используйте ДВССЫЛ или ИНДЕКС. Например, чтобы всегда брать последнюю дату в столбце A:

=ДНИ(ДВССЫЛ("A"&СЧЁТЗ(A:A)); A1)

Типичные ошибки и как их избежать

Даже в простых расчётах легко допустить ошибку. Вот самые распространённые:

⚠️ Внимание: Если после вычитания дат вы видите число вроде 45678 вместо дней, проверьте формат ячейки. Скорее всего, Excel отображает внутреннее представление даты, а не разницу. Измените формат на Общий или Числовой.
  • Текст вместо даты: Даты в формате "01-янв-2026" (с кавычками) воспринимаются как текст. Используйте ДАТАЗНАЧ для преобразования: =ДАТАЗНАЧ("01.01.2026").
  • Неучтённые високосные годы: Функции вроде ДНИ360 (для банковских расчётов) игнорируют високосные дни. Для точности используйте ДНИ.
  • Пустые ячейки: Если в одной из ячеек нет даты, формула вернёт ошибку. Защититесь с помощью ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(ДНИ(B1; A1); "Нет данных")
⚠️ Внимание: В Excel для Mac разделителем аргументов функции является запятая (,), а не точка с запятой (;). Если формула не работает, проверьте этот момент.

FAQ: Ответы на частые вопросы

Можно ли посчитать дни между датами в Google Таблицах?

Да, все описанные функции (ДНИ, ЧИСТРАБДНИ, РАЗНДАТ) работают и в Google Sheets, но с нюансами:

  • Функция РАЗНДАТ называется DATEDIF (английская версия).
  • Для ЧИСТРАБДНИ используйте NETWORKDAYS.
  • Разделитель аргументов — запятая (,).
Как посчитать количество полных недель между датами?

Используйте формулу:

=ЦЕЛОЕ(ДНИ(B1; A1)/7)

Или для точности (учитывая начало недели с понедельника):

=ЦЕЛОЕ((B1-A1-ДЕНЬНЕД(B1;2)+ДЕНЬНЕД(A1;2))/7)
Почему результат отличается от календарного расчёта?

Excel считает даты с 1900 года, а не с 0 года, и использует григорианский календарь. Расхождения могут возникать из-за:

  • Високосных годов (29 февраля).
  • Региональных настроек (например, в Саудовской Аравии выходные — пятница и суббота).
  • Ошибок ввода (например, 31.02.2026 — такой даты не существует).

Проверяйте данные с помощью функции =ДАТАГОД(A1) — она вернёт год для указанной даты. Если результат 1900, значит, дата введена как текст.

Как автоматически обновлять разницу при изменении дат?

Excel пересчитывает формулы автоматически, но если этого не происходит:

  1. Проверьте настройки: Формулы → Параметры вычислений → Автоматически.
  2. Используйте ГОРЯЧИЕ КЛАВИШИ: F9 — пересчитать все формулы на листе, Shift+F9 — в активном листе.
  3. Для сложных книг с большим количеством формул может помочь ручной пересчёт: Данные → Обновить все.
Можно ли посчитать дни с учётом полурабочих дней (например, суббота — короткий день)?

Стандартные функции этого не умеют, но можно создать пользовательскую функцию на VBA или использовать комбинацию:

=ЧИСТРАБДНИ(A1; B1; Праздники) + СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(НЕПРЯМ($A$1:$B$1));2)=6); 0,5)

Эта формула добавит по 0,5 дня за каждую субботу в диапазоне. Для её работы нужно создать именованный диапазон Праздники.