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

Если вам нужно узнать, сколько дней прошло между двумя датами в Microsoft Excel или Google Таблицах, но простая разница в ячейках выдает некорректный результат (например, формат даты вместо числа), проблема кроется в неправильном применении формул. Наиболее частая ошибка — попытка вычесть даты без учета их числового представления в Excel, где 1 января 1900 года = 1, а каждая последующая дата увеличивает это значение на единицу. Без знания этого принципа даже корректные на первый взгляд расчеты дадут сбой при работе с отрицательными значениями или пересечением границ месяцев.

В 80% случаев достаточно использовать оператор вычитания (=B2-A2), но он не учитывает рабочие/выходные дни, временные зоны или специфические форматы (например, "31.12.2023" vs "2023-12-31"). Для точных вычислений потребуются функции DATEDIF, ДАТА или СЕГОДНЯ, а для сложных сценариев — комбинация с ЕСЛИ и ИЛИ. Ниже разобраны все методы с примерами и типичными ловушками.

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

Самый простой способ посчитать дни между датами — вычесть одну дату из другой. Excel автоматически преобразует результат в количество дней, если ячейки имеют формат Общий или Числовой. Например, для дат в ячейках A1 (01.01.2026) и B1 (10.01.2026) формула будет:

=B1-A1  // Результат: 9 дней

Ключевые нюансы метода:

  • 📅 Формат ячеек: Если результат отображается как дата (например, "09.01.1900"), измените формат ячейки на Общий или Числовой через контекстное меню (ПКМ → Формат ячеек).
  • ⚠️ Отрицательные значения: Если первая дата позже второй, Excel вернет отрицательное число. Чтобы избежать этого, используйте =АБС(B1-A1).
  • 🔄 Автообновление: При изменении дат в исходных ячейках результат пересчитывается автоматически.
⚠️ Внимание: Если одна из дат введена как текст (например, через апостроф: '01.01.2026'), Excel не сможет вычесть значения. Проверьте выравнивание текста: даты по умолчанию выравниваются по правому краю, а текст — по левому.

2. Функция DATEDIF: расчет дней, месяцев и лет

Функция DATEDIF (от англ. Date Difference) — скрытый инструмент Excel, отсутствующий в списке мастер-функций, но поддерживаемый всеми версиями. Она позволяет вычислить разницу между датами в днях, месяцах или годах. Синтаксис:

=DATEDIF(начальная_дата; конечная_дата; "единица_измерения")

Аргумент "единица_измерения" может принимать значения:

  • 📊 "D" — количество полных дней между датами.
  • 📅 "M" — количество полных месяцев.
  • 🎂 "Y" — количество полных лет.
  • 🔄 "YM" — месяцы без учета лет (например, разница между 01.01.2023 и 15.03.2026 вернет 2 месяца).
  • 📆 "MD" — дни без учета месяцев и лет.
  • 🔢 "YD" — дни без учета годов (используется редко).

Пример: чтобы узнать, сколько дней прошло с 15 мая 2023 года до сегодняшнего дня:

=DATEDIF("15.05.2023"; СЕГОДНЯ(); "D")
⚠️ Внимание: Функция DATEDIF не учитывает високосные годы при расчете месяцев ("M"). Например, разница между 28.02.2023 и 28.02.2026 составит 12 месяцев, хотя фактически прошло 366 дней.
Единица измерения Пример формулы Результат для дат
01.01.2023 — 15.03.2026
"D" =DATEDIF("01.01.2023"; "15.03.2026"; "D") 439 дней
"M" =DATEDIF("01.01.2023"; "15.03.2026"; "M") 14 месяцев
"Y" =DATEDIF("01.01.2023"; "15.03.2026"; "Y") 1 год
"YM" =DATEDIF("01.01.2023"; "15.03.2026"; "YM") 2 месяца
📊 Какой метод расчета дней вы используете чаще?
Вычитание дат
Функция DATEDIF
Функция СЕГОДНЯ
Другое

3. Функция СЕГОДНЯ: динамический расчет прошедших дней

Если нужно посчитать, сколько дней прошло с определенной даты до текущего момента, используйте функцию СЕГОДНЯ() (или TODAY() в английской версии). Она возвращает сегодняшнюю дату и автоматически обновляется при каждом открытии файла.

Примеры применения:

  • 📅 Простые дни: =СЕГОДНЯ()-A1, где A1 — начальная дата.
  • 🔄 Дни до события: =A1-СЕГОДНЯ() (если A1 — будущая дата).
  • Процент выполнения: =(СЕГОДНЯ()-A1)/(B1-A1), где A1 — старт, B1 — дедлайн.

Важные ограничения функции СЕГОДНЯ():

  • ⏱️ Не обновляется в реальном времени — только при пересчете листа (F9) или открытии файла.
  • 📱 В Google Таблицах работает аналогично, но может зависеть от настроек временной зоны аккаунта.
  • 🔄 Если файл сохранен в формате .xls (Excel 97–2003), функция может не обновляться корректно.
Как зафиксировать текущую дату, чтобы она не менялась?

Используйте сочетание клавиш Ctrl+; (точка с запятой) для вставки статической даты или функцию =ДАТАГОД() + =МЕСЯЦ() + =ДЕНЬ() с ручным вводом значений.

4. Расчет рабочих дней: функция ЧИСТРАБДНИ

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

=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])

Аргумент [праздники] — необязательный диапазон ячеек с датами нерабочих дней (например, государственные праздники). Пример:

=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026"; D2:D5)

где D2:D5 — список праздников (например, 1–8 января).

Типичные ошибки при использовании ЧИСТРАБДНИ:

  • 📅 Формат праздников: Даты в диапазоне [праздники] должны быть в формате даты, а не текста.
  • 🔄 Отрицательный результат: Если начальная дата позже конечной, функция вернет ошибку #ЧИСЛО!.
  • 🌍 Региональные выходные: По умолчанию выходные — суббота и воскресенье. Для других дней (например, пятница-суббота) используйте ЧИСТРАБДНИ.МЕЖД (Excel 2010+).

1. Проверьте формат ячеек с датами (должен быть "Дата").

2. Убедитесь, что праздники введены как даты, а не текст.

3. Для нестандартных выходных используйте ЧИСТРАБДНИ.МЕЖД с параметром [выходные].

4. Если результат #ЗНАЧ!, проверьте наличие пустых ячеек в диапазоне праздников.

-->

5. Продвинутые сценарии: комбинация функций

Для сложных задач (например, расчет дней до истечения срока годности с учетом выходных) комбинируйте функции. Примеры:

1. Дни до дедлайна с цветовой индикацией:

=ЕСЛИ(ЧИСТРАБДНИ(СЕГОДНЯ(); A1)<5; "Срочно!"; "В норме")

где A1 — дата дедлайна. Для визуализации примените Условное форматирование (меню Главная → Условное форматирование).

2. Процент выполнения проекта:

=ОКРУГЛ((СЕГОДНЯ()-A1)/(B1-A1)*100; 0) & "%"

где A1 — старт, B1 — окончание проекта.

3. Проверка просрочки:

=ЕСЛИ(СЕГОДНЯ()>A1; "Просрочено на " & СЕГОДНЯ()-A1 & " дней"; "Актуально")
⚠️ Внимание: При комбинации функций следите за порядком операций. Например, в формуле =ЕСЛИ(DATEDIF(...)>30; "Да"; "Нет") сначала вычисляется DATEDIF, затем применяется ЕСЛИ. Используйте скобки для явного указания приоритетов.

6. Типичные ошибки и их решения

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

Ошибка Причина Решение
#ЗНАЧ! Ячейка содержит текст вместо даты. Используйте ДАТАЗНАЧ() для преобразования: =ДАТАЗНАЧ(A1).
Результат в формате даты (например, "09.01.1900") Неверный формат ячейки с результатом. Измените формат на Общий или Числовой.
#ИМЯ? Опечатка в названии функции (например, DATADIF вместо DATEDIF). Проверьте синтаксис. DATEDIF чувствительна к регистру в некоторых версиях.
Некорректное количество дней в феврале Excel ошибочно считает 1900 год високосным. Используйте DATEDIF с параметром "D" или ручную корректировку.

Критическая особенность: Excel считает 1900 год високосным (хотя на самом деле он невисокосный), что может искажать расчеты при работе с историческими датами. Для точных вычислений используйте альтернативные календарные системы или проверяйте результаты вручную.

7. Альтернативы Excel: Google Таблицы и Python

Если вам нужны более гибкие инструменты для работы с датами, рассмотрите альтернативы:

Google Таблицы:

  • 📊 Функции аналогичны Excel, но DATEDIF работает стабильнее.
  • 🔄 Автообновление TODAY() зависит от временной зоны аккаунта (настраивается в Файл → Настройки).
  • 📅 Для рабочих дней используйте =NETWORKDAYS().

Python (библиотека datetime):

from datetime import datetime

start = datetime(2026, 1, 1)

end = datetime(2026, 1, 10)

delta = end - start

print(delta.days) # Вывод: 9

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

  • 🐍 Точность: нет ошибок с високосными годами.
  • 📊 Гибкость: легко учитывать праздники из внешних источников (например, API календарей).
  • 🔄 Автоматизация: интеграция с базами данных и веб-сервисами.

FAQ: Частые вопросы о расчете дней в Excel

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

Используйте функцию ДАТАЗНАЧ() для преобразования текста в дату:

=ДАТАЗНАЧ("01.01.2026") - A1

Если текст в нестандартном формате (например, "1 января 2026"), примените комбинацию функций:

=ДАТА(ГОД(ДАТАЗНАЧ("1&"&" января 2026")); МЕСЯЦ(ДАТАЗНАЧ("1&"&" января 2026")); ДЕНЬ(ДАТАЗНАЧ("1&"&" января 2026")))
Почему функция DATEDIF возвращает ошибку #ЧИСЛО?

Ошибка #ЧИСЛО! возникает в двух случаях:

  1. Начальная дата позже конечной. Решение: поменяйте местами аргументы или используйте АБС().
  2. Один из аргументов не является датой. Решение: проверьте формат ячеек (ПКМ → Формат ячеек).
Как посчитать дни с учетом только рабочих часов (например, 8 часов в день)?

Excel не имеет встроенной функции для расчета рабочих часов, но вы можете:

  1. Посчитать количество рабочих дней (ЧИСТРАБДНИ).
  2. Умножить результат на 8 (часов): =ЧИСТРАБДНИ(A1; B1)*8.

Для точного учета перерывов и смен используйте Power Query или VBA.

Можно ли посчитать дни между датами в разных временных зонах?

Excel не поддерживает временные зоны напрямую. Решения:

  • Приведите обе даты к одной временной зоне вручную (например, =A1 + (3/24) для добавления 3 часов).
  • Используйте Power Query для загрузки данных с учетом временных зон.
  • Для критичных задач перейдите на Python с библиотекой pytz.
Как сделать так, чтобы дата не обновлялась при открытии файла?

Замените функцию СЕГОДНЯ() на статическое значение:

  1. Введите =СЕГОДНЯ() в ячейку.
  2. Скопируйте ячейку (Ctrl+C).
  3. Вставьте как Значение (ПКМ → Специальная вставка → Значения).

Альтернатива: используйте сочетание клавиш Ctrl+; для вставки текущей даты как статического текста.