Как посчитать количество дней между двумя датами в Excel: от простого к сложному

Расчёт разницы между датами в Microsoft Excel — одна из самых востребованных задач при работе с временными данными. Бухгалтерам нужно определять просрочки платежей, логистам — сроки доставки, а HR-специалистам — стаж сотрудников. Казалось бы, что может быть проще: вычесть одну дату из другой? Но на практике пользователи сталкиваются с ошибками формата, некорректными результатами при учёте выходных или необходимости исключить праздники. Эта статья поможет разобраться во всех нюансах — от базовых формул до автоматизированных решений с Power Query.

Мы рассмотрим не только стандартный метод вычитания дат, но и продвинутые функции вроде ДНИ, РАЗНДАТ, а также способы учесть только рабочие дни с помощью ЧИСТРАБДНИ. Особое внимание уделим типичным ошибкам, из-за которых Excel возвращает странные числа вместо ожидаемой разницы в днях. Например, знали ли вы, что программа хранит даты как последовательные числа, начиная с 1 января 1900 года (номер 1)? Это знание объясняет, почему иногда вместо "30 дней" вы получаете "30,98"?

Статья будет полезна как новичкам, так и опытным пользователям. Новички найдут здесь пошаговые инструкции с картинками, а продвинутые — оптимизированные решения для обработки тысяч строк данных. Все примеры адаптированы для Excel 2010–2023 и Excel Online, с указанием особенностей для каждой версии.

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

Самый интуитивно понятный способ — вычесть одну дату из другой. Excel автоматически преобразует результат в количество дней, если ячейки имеют правильный формат. Например, формула =B2-A2 вернёт разницу между датами в ячейках B2 и A2.

Но здесь есть подводные камни:

  • 🔹 Формат ячеек: Если результат отображается как дата (например, "01.01.1900"), а не число — измените формат ячейки на Общий или Числовой через контекстное меню (ПКМ → Формат ячеек).
  • 🔹 Отрицательные значения: Если первая дата позже второй, Excel покажет отрицательное число дней. Чтобы избежать этого, используйте =АБС(B2-A2).
  • 🔹 Время в датах: Если в ячейках указано не только число, но и время (например, "10.05.2023 14:30"), результат будет дробным (например, "30,6" вместо "30").

Пример таблицы с базовым расчётом:

Дата началаДата окончанияФормулаРезультат (дней)
01.01.202315.01.2023=B2-A214
10.05.2023 10:0012.05.2023 18:00=B3-A32,33
31.12.202201.01.2023=АБС(B4-A4)1
⚠️ Внимание: В Excel для Mac система дат начинается с 1 января 1904 года, а не 1900. Это может привести к расхождению на 1462 дня при импорте файлов из Windows-версии. Чтобы исправить, перейдите в Excel → Настройки → Расчёты и снимите галочку с "Система дат 1904 года".

2. Функция ДНИ: почему она лучше простого вычитания

Функция =ДНИ(конечная_дата; начальная_дата) специально создана для расчёта разницы в днях и имеет два ключевых преимущества:

  1. Автоматически игнорирует время (даже если оно указано в ячейках).
  2. Более читаемый синтаксис — сразу понятно, какая дата начальная, а какая конечная.

Синтаксис:

=ДНИ(ячейка_с_конечной_датой; ячейка_с_начальной_датой)

Примеры использования:

  • 📅 =ДНИ("31.12.2023"; "01.01.2023") → вернёт 364 (количество дней в 2023 году за вычетом 1 января).
  • 📅 =ДНИ(СЕГОДНЯ(); A2) → посчитает, сколько дней прошло с даты в ячейке A2 до сегодняшнего дня.
  • 📅 =ДНИ(D2; C2)-1 → разница между датами минус 1 день (полезно для расчёта сроков без учёта последнего дня).
📊 Какой способ расчёта дней вы используете чаще?
Простое вычитание
Функция ДНИ
Функция РАЗНДАТ
Другие методы

Важный нюанс: если одна из дат введена как текст (например, через апостроф: '01.01.2023'), функция ДНИ вернёт ошибку #ЗНАЧ!. Чтобы исправить, преобразуйте текст в дату с помощью =ДАТАЗНАЧ(A1).

3. Функция РАЗНДАТ: когда нужны годы, месяцы и дни

Если вам требуется не только количество дней, но и разбивка по годам, месяцам и дням — используйте РАЗНДАТ (DATEDIF в английской версии). Эта функция скрытая: её нет в списке мастер-функций, но она работает во всех версиях Excel.

Синтаксис:

=РАЗНДАТ(начальная_дата; конечная_дата; "код_единица_измерения")

Коды единиц измерения:

  • 📅 "y" — полные годы между датами.
  • 📅 "m" — полные месяцы (без учёта годов).
  • 📅 "d" — дни (без учёта месяцев и лет).
  • 📅 "ym" — месяцы между датами, игнорируя годы.
  • 📅 "yd" — дни между датами, игнорируя годы.
  • 📅 "md" — разница в днях, как если бы месяцы и годы совпадали.

Примеры:

ФормулаНачальная датаКонечная датаРезультат
=РАЗНДАТ(A2; B2; "y")15.03.202020.11.20233
=РАЗНДАТ(A3; B3; "m")01.01.202331.03.202314
=РАЗНДАТ(A4; B4; "d")28.02.202301.03.20231
⚠️ Внимание: Функция РАЗНДАТ округляет результаты вниз. Например, если между датами 1 год и 364 дня, формула =РАЗНДАТ(..., "y") вернёт 1, а не 2. Для точного расчёта используйте комбинацию кодов, например: =РАЗНДАТ(A2; B2; "y") & " лет, " & РАЗНДАТ(A2; B2; "ym") & " мес.".
Почему РАЗНДАТ не видна в списке функций?

Функция РАЗНДАТ — это "наследство" от Lotus 1-2-3, которое Microsoft оставила для совместимости. Она не документирована в официальной справке, но работает во всех версиях Excel, включая Excel 365. Вводите её вручную — автозаполнение не сработает.

4. Учёт только рабочих дней: функции ЧИСТРАБДНИ и РАБДЕНЬ

Если вам нужно посчитать дни без учёта выходных (субботы и воскресенья) или праздников, используйте:

  • 📊 =ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники]) — возвращает количество рабочих дней.
  • 📊 =РАБДЕНЬ(начальная_дата; количество_дней; [праздники]) — прибавляет рабочие дни к дате (полезно для расчёта дедлайнов).

Пример с праздничными днями:

=ЧИСТРАБДНИ("01.01.2023"; "31.01.2023"; {"02.01.2023"; "07.01.2023"})

Эта формула вернёт количество рабочих дней в январе 2023 года за вычетом 2 и 7 января (новогодние каникулы).

Как указать праздники:

  • 📌 Вручную в фигурных скобках: {"01.01.2023"; "08.03.2023"}.
  • 📌 Ссылкой на диапазон ячеек с датами праздников: =ЧИСТРАБДНИ(A2; B2; D2:D10).

Убедитесь, что начальная дата раньше конечной|Проверьте формат ячеек с датами (должен быть "Дата")|Создайте отдельный столбец с праздничными датами|Используйте абсолютные ссылки на праздники (например, $D$2:$D$10)

-->

Важный момент: функция ЧИСТРАБДНИ считает субботу и воскресенье выходными по умолчанию. Если у вас другой график (например, выходной — пятница), используйте ЧИСТРАБДНИ.МЕЖД (доступна с Excel 2010):

=ЧИСТРАБДНИ.МЕЖД(A2; B2; 11; D2:D10)

Где 11 — это строка из 0 и 1, где 1 обозначает рабочий день, а 0 — выходной. Например, 1111100 означает, что выходные — суббота и воскресенье.

5. Расчёт дней с учётом времени: секреты функции ВРЕМЗНАЧ

Если в ваших данных указано не только число, но и время (например, "10.05.2023 14:30"), простое вычитание дат вернёт дробное число, где целая часть — дни, а дробная — доля дня. Чтобы разделить дни и часы, используйте:

  • 🕒 =ЦЕЛОЕ(B2-A2) — только полные дни.
  • 🕒 =(B2-A2)-ЦЕЛОЕ(B2-A2) — дробная часть (время).
  • 🕒 =ВРЕМЯ(ЧАС(B2-A2); МИНУТЫ(B2-A2); СЕКУНДЫ(B2-A2)) — преобразование дробной части в формат времени.

Пример: если B2-A2 = 3,75 (3 дня и 18 часов), то:

  • =ЦЕЛОЕ(3,75) → 3
  • =ВРЕМЯ(0; 0,75*24; 0) → 18:00:00

Для автоматизации создайте пользовательскую функцию через VBA (подходит для Excel 2016+):

Function ДниИВремя(Дата1 As Date, Дата2 As Date) As String

Dim Дней As Long, Часов As Long

Дней = Int(Abs(Dата2 - Дата1))

Часов = Hour(Abs(Dата2 - Дата1)) + (Minute(Abs(Dата2 - Дата1)) / 60)

ДниИВремя = Дней & " дн. " & Format(Часов, "0 ч.")

End Function

Теперь в Excel можно использовать =ДниИВремя(A2; B2).

⚠️ Внимание: При работе с временными метками из внешних источников (например, 1C или SQL) Excel может неправильно интерпретировать формат. Используйте =ДАТАЗНАЧ(ЛЕВСИМВ(A1; 10)) + ВРЕМЗНАЧ(ПРАВСИМВ(A1; 8)), чтобы разделить дату и время из строки вида "2023-05-10 14:30:00".

6. Продвинутые приёмы: Power Query и динамические массивы

Если вам нужно обработать тысячи строк с датами или создать отчёт с автоматическим обновлением, ручные формулы станут тормозить производительность. В таких случаях используйте:

Способ 1: Power Query (Excel 2016+)

Алгоритм:

  1. Выделите исходные данные → Данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте столбец: Добавить столбец → Пользовательский.
  3. Введите формулу: = Duration.Days([ДатаОкончания] - [ДатаНачала]).
  4. Нажмите Закрыть и загрузить.

Преимущества:

  • ⚡ Обрабатывает миллионы строк без тормозов.
  • ⚡ Автоматически обновляет данные при изменении источника.
  • ⚡ Можно добавить фильтрацию по годам/месяцам прямо в запрос.

Способ 2: Динамические массивы (Excel 365)

Используйте функции ПОСЛЕД, ФИЛЬТР и СОРТ для анализа диапазонов дат. Например, чтобы получить все даты между двумя значениями:

=ПОСЛЕД(ДАТА(ГОД(A2); МЕСЯЦ(A2); 1):ДАТА(ГОД(B2); МЕСЯЦ(B2); 1); 1; 0; 1)

Эта формула сгенерирует массив всех дней между датами в A2 и B2.

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

Даже опытные пользователи сталкиваются с ошибками при работе с датами. Вот самые распространённые:

ОшибкаПричинаРешение
######Ячейка слишком узкая для отображения даты.Растяните столбец или измените формат на "Дата".
#ЗНАЧ!Одна из "дат" на самом деле текст (например, "01.01.2023г.").Используйте =ДАТАЗНАЧ(ПОДСТАВИТЬ(A1; "г."; "")).
#ЧИСЛО!Результат вычитания превышает допустимое значение (более 2 147 483 647 дней).Разбейте расчёт на части или используйте Power Query.
Неправильный результат (например, 43831 вместо 30)Ячейки имеют формат "Общий" вместо "Дата".Выделите ячейки → CTRL+1 → выберите формат "Дата".

Ещё одна распространённая проблема — летоисчисление 1900 vs 1904. Если при переносе файла между Windows и Mac даты сдвинулись на 4 года, проверьте настройки:

  • 🖥️ В Windows: Файл → Параметры → Дополнительно → При переходе на эту книгу → Использовать систему дат 1904 (должно быть отключено).
  • 🍎 В Mac: Excel → Настройки → Расчёты → Система дат 1904 года (должно быть отключено).

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

Как посчитать дни между сегодняшней датой и датой в ячейке?

Используйте =СЕГОДНЯ()-A1 (если дата в A1 раньше сегодняшней) или =A1-СЕГОДНЯ() (если дата в будущем). Чтобы избежать отрицательных значений, оберните в АБС.

Почему Excel показывает ###### вместо даты?

Это означает, что столбец слишком узкий для отображения. Растяните его или измените формат ячейки на "Краткий формат даты". Также проверьте, что в ячейке действительно дата, а не текст.

Как посчитать количество полных недель между датами?

Используйте =ЦЕЛОЕ((B1-A1)/7) или =ОТБР(B1-A1; 7). Если нужно учитывать неполные недели как полные, используйте =ОКРУГЛВВЕРХ((B1-A1)/7; 0).

Можно ли посчитать дни с учётом только будних дней?

Да, используйте =ЧИСТРАБДНИ(A1; B1). Чтобы исключить праздники, добавьте третий аргумент с диапазоном дат праздников, например: =ЧИСТРАБДНИ(A1; B1; D1:D10).

Как в Excel посчитать возраст человека?

Лучше всего использовать комбинацию функций: =РАЗНДАТ(A1; СЕГОДНЯ(); "y") & " лет, " & РАЗНДАТ(A1; СЕГОДНЯ(); "ym") & " мес., " & РАЗНДАТ(A1; СЕГОДНЯ(); "md") & " дн.", где A1 — дата рождения.