Почему расчёт дней в Excel — это не так просто, как кажется
На первый взгляд, подсчёт дней между двумя датами в Microsoft Excel или Google Таблицах кажется элементарной задачей. Однако даже опытные пользователи сталкиваются с неожиданными ошибками: программа может вернуть отрицательное число, неверный результат из-за форматов ячеек или игнорировать високосные годы. Например, если вы попытаетесь вычесть 01.01.2023 из 31.12.2022 без корректной настройки, Excel выдаст бессмысленный набор символов вместо ожидаемого −1.
В этой статье мы разберём 5 надёжных методов расчёта дней — от базового вычитания до продвинутых функций вроде DATEDIF и NETWORKDAYS. Вы узнаете, как учитывать только рабочие дни, игнорировать праздники, а также избегать типичных ошибок при работе с датами в формате ДД.ММ.ГГГГ или ММ/ДД/ГГ. Особое внимание уделим нюансам, которые не описаны в стандартной справке Excel — например, почему функция DAYS может давать сбой при неявном преобразовании текста в дату.
Метод 1: Простое вычитание дат (самый быстрый способ)
Если вам нужно быстро узнать, сколько дней прошло между двумя датами, достаточно вычесть одну дату из другой. Excel автоматически преобразует разницу в количество дней. Например, формула:
=B2-A2
где A2 — начальная дата (15.05.2026), а B2 — конечная (20.05.2026), вернёт результат 5. Этот метод работает и в обратную сторону: если вычесть более позднюю дату из ранней, получится отрицательное число (например, −5).
- ✅ Плюсы: минимальные затраты времени, не требует знания функций.
- ⚠️ Минусы: не учитывает рабочие/выходные дни, чувствителен к формату ячеек.
⚠️ Внимание: Если после вычитания вы видите вместо числа дату вроде04.01.1900, проверьте формат ячейки с результатом. Выделите её, нажмитеCtrl+1(илиФормат ячеек→Числовой) и выберите формат Общий или Числовой.
Метод 2: Функция DATEDIF — гибкость и точность
Функция DATEDIF (от англ. Date Difference) — один из самых мощных инструментов для работы с датами, хотя и не документирован в последних версиях Excel. Она позволяет вычислять разницу не только в днях, но и в месяцах или годах. Синтаксис:
=DATEDIF(начальная_дата; конечная_дата; "единица_измерения")
Для подсчёта дней используйте параметр "D":
=DATEDIF(A2; B2; "D")
Эта функция корректно обрабатывает високосные годы и не требует ручной настройки форматов. Например, для дат 28.02.2026 и 01.03.2026 она вернёт 2 (с учётом високосного дня в 2026 году).
| Параметр | Описание | Пример результата |
|---|---|---|
"D" |
Количество полных дней между датами | =DATEDIF("01.01.2026"; "10.01.2026"; "D") → 9 |
"M" |
Количество полных месяцев | =DATEDIF("01.01.2026"; "10.02.2026"; "M") → 1 |
"Y" |
Количество полных лет | =DATEDIF("01.01.2020"; "01.01.2026"; "Y") → 4 |
⚠️ Внимание: Если начальная дата позже конечной,DATEDIFвернёт ошибку#ЧИСЛО!. Чтобы избежать этого, используйте функциюABS(абсолютное значение):=ABS(DATEDIF(A2; B2; "D")).
Метод 3: Функция DAYS — современная альтернатива
В Excel 2013 и новее появилась функция DAYS, которая упрощает подсчёт дней между двумя датами. Её синтаксис интуитивно понятен:
=DAYS(конечная_дата; начальная_дата)
Например, =DAYS("31.12.2026"; "01.01.2026") вернёт 365 (или 366 для високосного года). Преимущество DAYS перед DATEDIF — она не возвращает ошибку при обратном порядке дат, а просто выдаёт отрицательное число.
- 📅 Когда использовать: если вам нужна только разница в днях без дополнительных параметров (месяцы, годы).
- ⚡ Быстрое решение: комбинация с
ABSдля гарантированно положительного результата:=ABS(DAYS(B2; A2)).
Почему DAYS может возвращать неверный результат?
Если одна из дат введена как текст (например, "01.01.2026" в кавычках), Excel не преобразует её автоматически. Чтобы исправить это, используйте функцию ДАТАЗНАЧ: =DAYS(ДАТАЗНАЧ(B2); ДАТАЗНАЧ(A2)).
Метод 4: Подсчёт только рабочих дней (исключая выходные)
Если вам нужно узнать, сколько рабочих дней прошло между двумя датами (например, для расчёта сроков выполнения задач), используйте функцию NETWORKDAYS. Она автоматически исключает субботы и воскресенья:
=NETWORKDAYS(начальная_дата; конечная_дата; [праздники])
Пример: =NETWORKDAYS("01.05.2026"; "10.05.2026") вернёт 6 (с учётом того, что 1, 4–5 и 8–9 мая в 2026 года приходятся на выходные). Необязательный параметр [праздники] позволяет исключить дополнительные дни — например, государственные праздники. Для этого укажите диапазон ячеек с датами праздников:
=NETWORKDAYS(A2; B2; D2:D5)
где D2:D5 — список праздничных дат.
Убедитесь, что все даты введены в формате ДД.ММ.ГГГГ|Проверьте, что праздники указаны в отдельном столбце|Используйте абсолютные ссылки для диапазона праздников (например, $D$2:$D$5), если формула будет копироваться-->
Метод 5: Расчёт дней с учётом текущей даты (динамические формулы)
Чтобы автоматически обновлять количество дней от фиксированной даты до сегодняшнего дня, используйте функцию TODAY (или СЕГОДНЯ в русской версии). Например:
=TODAY()-A2
где A2 — ячейка с начальной датой. Эта формула будет ежедневно пересчитывать разницу. Если нужно наоборот — посчитать дни до будущей даты (например, до дедлайна), используйте:
=B2-TODAY()
где B2 — целевая дата. Если результат отрицательный, это означает, что срок уже истёк.
- 🔄 Динамическое обновление: функция
TODAYпересчитывается при каждом открытии файла или изменении данных. - ⏳ Пример использования: отслеживание сроков годности, контроль дедлайнов проектов, расчёт стажа сотрудников.
⚠️ Внимание: Если файл сохранён в формате.xls(Excel 97–2003), функцияTODAYможет не обновляться при открытии в новых версиях. Сохраните файл в формате.xlsxили.xlsmдля корректной работы.
Типичные ошибки и как их избежать
Даже простые операции с датами в Excel могут приводить к ошибкам. Вот наиболее распространённые проблемы и их решения:
- Ошибка
#ЗНАЧ!: возникает, если одна из ячеек содержит текст вместо даты. Проверьте формат ячеек (должен бытьДата) или используйтеДАТАЗНАЧдля преобразования текста в дату. - Неверный результат из-за региональных настроек: в некоторых странах формат даты по умолчанию —
ММ/ДД/ГГГГ. Если вы введёте01.05.2026, Excel может интерпретировать это как1 мая(в России) или5 января(в США). Чтобы избежать путаницы, используйте функциюДАТА:
=ДАТА(2026; 5; 1)
или указывайте месяц словом:
=ДАТАЗНАЧ("1-май-2026")
- 📅 Проверка форматов: выделите ячейку с датой и посмотрите, как она отображается в строке формул. Если там текст вроде
'01.05.2026(с апострофом), Excel воспринимает это как строку, а не дату. - 🔍 Диагностика: используйте функцию
ТИП, чтобы проверить тип данных:=ТИП(A2). Для даты результат будет 1, для текста — 2.
Практические примеры: от простых задач до сложных расчётов
Рассмотрим несколько реальных сценариев, где подсчёт дней в Excel может быть полезен:
| Задача | Формула | Пример результата |
|---|---|---|
| Сколько дней осталось до Нового года? | =ДАТА(2026;1;1)-TODAY() |
Если сегодня 15.11.2026, результат — 47 |
| Сколько рабочих дней прошло с начала месяца? | =NETWORKDAYS(ДАТА(2026;11;1); TODAY()) |
Для 15.11.2026 (пятница) — 11 |
| Возраст человека в днях | =DATEDIF("15.05.1990"; TODAY(); "D") |
Для 15.11.2026 — 12530 |
| Срок действия договора (в днях) | =DAYS("31.12.2026"; TODAY()) |
Если сегодня 15.11.2026, результат — 46 |
Критически важный нюанс: при расчёте возраста или стажа с использованием DATEDIF и текущей даты (TODAY) результат будет меняться ежедневно. Если вам нужно зафиксировать значение на определённую дату (например, на момент создания отчёта), замените TODAY() на конкретную дату вручную или используйте комбинацию Ctrl+; для вставки текущей даты как статического значения.
FAQ: Ответы на частые вопросы
Как посчитать дни между датами, если они записаны в разных форматах (например, ДД.ММ.ГГГГ и ММ/ДД/ГГГГ)?
Используйте функцию ДАТА или ДАТАЗНАЧ, чтобы привести даты к единому формату. Например:
=DAYS(ДАТАЗНАЧ("05/01/2026"); ДАТАЗНАЧ("01.05.2026"))
Здесь 05/01/2026 будет интерпретировано как 5 января (если в настройках Excel установлен формат ММ/ДД/ГГГГ), а 01.05.2026 — как 1 мая. Чтобы избежать путаницы, явно укажите месяц числом: =ДАТА(2026; 1; 5) для 5 января.
Почему при вычитании дат получается странное число вроде 45342?
Excel хранит даты в виде последовательных чисел, где 1 соответствует 01.01.1900. Число 45342 — это количество дней с 1 января 1900 года до вашей даты. Чтобы преобразовать его в читаемый формат, измените формат ячейки на Дата (нажмите Ctrl+1 → выберите категорию Дата).
Как посчитать дни с учётом только понедельника-пятницы и исключить праздники?
Используйте функцию NETWORKDAYS.INTL, которая позволяет настраивать выходные дни. Например, чтобы исключить субботу и воскресенье, а также праздники из диапазона D2:D10:
=NETWORKDAYS.INTL(A2; B2; 1; D2:D10)
Параметр 1 обозначает стандартные выходные (суббота-воскресенье). Для других комбинаций (например, пятница-суббота) используйте другие числа (см. справку Microsoft).
Можно ли посчитать дни между датами в Google Таблицах?
Да, все описанные методы работают и в Google Таблицах, за исключением функции DATEDIF, которая там поддерживается, но может вести себя иначе. Например, в Google Таблицах формула:
=DATEDIF(A2; B2; "D")
будет работать, но для корректного отображения дат убедитесь, что в настройках файла установлен регион Россия (Файл → Настройки → Региональные настройки).
Как посчитать количество полных недель между датами?
Разделите разницу в днях на 7 и округлите в меньшую сторону с помощью функции ЦЕЛОЕ:
=ЦЕЛОЕ((B2-A2)/7)
Например, для дат 01.01.2026 и 20.01.2026 (разница 19 дней) результат будет 2 (полных недели).