Почему вычисление разницы между датами в Excel — это не так просто, как кажется
На первый взгляд, подсчёт количества дней между двумя датами в Microsoft Excel или Google Таблицах кажется тривиальной задачей: взял две ячейки с датами, вычел одну из другой — и готово. Но на практике пользователи сталкиваются с массой подводных камней: от некорректного отображения результата до ошибок при работе с високосными годами или временными зонами. Например, если просто вычесть 01.01.2026 из 31.12.2023, Excel может вернуть отрицательное число, хотя логически разница должна быть положительной.
Ещё одна распространённая проблема — учёт рабочих и выходных дней. Бухгалтерам, логистам и HR-специалистам часто нужно посчитать не календарные дни, а именно рабочие, исключая субботы, воскресенья и праздники. Стандартное вычитание дат здесь не поможет. К тому же, в разных странах разные праздничные календари, что усложняет задачу. Эта статья поможет разобраться во всех нюансах — от базовых формул до продвинутых функций с учётом специфических требований.
Способ 1: Простое вычитание дат (самый быстрый метод)
Если вам нужно узнать общее количество дней между двумя датами без учёта выходных или праздников, достаточно воспользоваться элементарной арифметикой. Excel хранит даты в виде последовательных чисел (начиная с 1 для 1 января 1900 года), поэтому их можно вычитать как обычные числа.
Формула выглядит так:
=Конечная_дата - Начальная_дата
Пример: если в ячейке A1 указана дата 15.05.2026, а в B1 — 20.05.2026, формула =B1-A1 вернёт 5 (количество дней между ними). Важно: результат будет в формате числа, но если ячейка отформатирована как "Дата", Excel может отобразить его как дату 05.01.1900. Чтобы этого избежать, предварительно установите для ячейки с результатом формат "Общий" или "Числовой".
- ✅ Преимущества: максимальная простота, работает во всех версиях Excel.
- ⚠️ Ограничения: не учитывает рабочие/выходные дни, может давать отрицательные значения, если начальная дата позже конечной.
- 🔄 Альтернатива: если даты введены как текст (например, "15 мая"), используйте
=ДАТАЗНАЧ(B1)-ДАТАЗНАЧ(A1).
Способ 2: Функция DATEDIF — скрытая мощь Excel
Функция DATEDIF (от англ. Date Difference) — одна из самых полезных, но при этом скрытых в официальной документации Microsoft. Она позволяет вычислять разницу между датами не только в днях, но и в месяцах или годах, с учётом различных единиц измерения. Синтаксис:
=DATEDIF(начальная_дата; конечная_дата; единица_измерения)
Аргумент единица_измерения может принимать следующие значения:
| Параметр | Описание | Пример результата |
|---|---|---|
"D" | Полное количество дней | =DATEDIF("01.01.2026"; "31.01.2026"; "D") → 30 |
"M" | Полное количество месяцев | =DATEDIF("01.01.2026"; "01.03.2026"; "M") → 2 |
"Y" | Полное количество лет | =DATEDIF("01.01.2020"; "01.01.2026"; "Y") → 4 |
"YM" | Месяцы без учёта лет | =DATEDIF("01.01.2023"; "15.03.2026"; "YM") → 2 |
"MD" | Дни без учёта месяцев и лет | =DATEDIF("01.01.2026"; "15.01.2026"; "MD") → 14 |
Особенность DATEDIF: она корректно обрабатывает високосные годы. Например, разница между 28.02.2023 и 01.03.2026 составит 366 дней (2026 год — високосный). Однако функция не учитывает временные зоны, поэтому для международных расчётов её лучше комбинировать с =ЧАСОВОЙПОЯС().
Способ 3: Функция РАЗНДАТ — аналог DATEDIF для русскоязычных пользователей
В локализованных версиях Excel (например, русскоязычной) функция DATEDIF может не работать из-за особенностей перевода. Вместо неё используется РАЗНДАТ — полный аналог с идентичным синтаксисом, но на русском языке:
=РАЗНДАТ(начальная_дата; конечная_дата; единица_измерения)
Аргументы единица_измерения те же: "Д" для дней, "М" для месяцев, "Г" для лет и т.д. Пример:
=РАЗНДАТ("10.05.2026"; "25.05.2026"; "Д")
Результат: 15 (дни между 10 и 25 мая). Обратите внимание, что в русскоязычной версии Excel разделителем аргументов функции является ;, а не , как в английской.
⚠️ Внимание: Если при использованииРАЗНДАТExcel выдаёт ошибку#ИМЯ?, проверьте регистр букв в единице измерения. Параметры должны быть в верхнем регистре (например,"Д", а не"д").
- 📅 Подходит для: пользователей русскоязычных версий Excel 2007–2023.
- 🔄 Альтернатива: если
РАЗНДАТне работает, попробуйте=ДЕНЬ360()для приблизительных расчётов. - ⚡ Совет: Для удобства создайте именованный диапазон с единицами измерения (например,
Дни="Д") и ссылайтесь на него в формуле.
Способ 4: Подсчёт рабочих дней с функцией ЧИСТРАБДНИ
Для расчёта только рабочих дней (исключая субботы, воскресенья и праздники) в Excel предусмотрена функция ЧИСТРАБДНИ. Её синтаксис:
=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])
Необязательный аргумент [праздники] — это диапазон ячеек с датами праздников, которые также нужно исключить. Пример:
=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026"; D1:D10)
Где D1:D10 — список праздников (например, 1–8 января в России).
Если праздников нет, третий аргумент можно опустить:
=ЧИСТРАБДНИ("01.05.2026"; "10.05.2026")
Результат: 6 (с 1 по 10 мая 2026 года при 5-дневной рабочей неделе).
⚠️ Внимание: ФункцияЧИСТРАБДНИсчитает субботу и воскресенье выходными по умолчанию. Если у вас другой график (например, скользящие выходные), используйтеЧИСТРАБДНИ.INTLс указанием параметра выходных дней.
Создать список праздников в отдельном диапазоне|Проверить формат дат в ячейках|Указать корректный диапазон праздников в формуле|Применить формат "Общий" к ячейке с результатом-->
Способ 5: Продвинутые приёмы — учёт временных меток и негативных значений
Если ваши даты содержат не только дату, но и время (например, 15.05.2026 14:30), простое вычитание или DATEDIF вернёт дробное число, где целая часть — дни, а дробная — доля дня. Чтобы получить только целые дни, используйте функцию =ЦЕЛОЕ():
=ЦЕЛОЕ(B1-A1)
Для учёта негативных значений (когда начальная дата позже конечной) оберните формулу в =АБС():
=АБС(DATEDIF(A1; B1; "D"))
Это гарантирует, что результат всегда будет положительным, независимо от порядка дат.
Если нужно посчитать дни между сегодняшней датой и какой-либо прошлой/будущей датой, используйте =СЕГОДНЯ():
=DATEDIF("01.01.2026"; СЕГОДНЯ(); "D")
Эта формула автоматически обновляется при каждом открытии файла.
Как учитывать летнее/зимнее время?
Excel не учитывает переход на летнее/зимнее время автоматически, так как оперирует только календарными датами без привязки к временным зонам. Если вам нужно точное количество часов с учётом перехода, используйте комбинацию функций =ЧАС() и =МИНУТЫ() для корректировки разницы. Например, для Москвы разница между 25.10.2026 (переход на зимнее время) и 30.10.2026 будет на 1 час больше, чем календарные 5 дней.
Типичные ошибки и как их избежать
Даже опытные пользователи Excel иногда сталкиваются с ошибками при работе с датами. Вот самые распространённые:
- Ошибка #ЗНАЧ!: возникает, если одна из ячеек содержит текст вместо даты. Проверьте формат ячеек (
Ctrl+1) и при необходимости используйте=ДАТАЗНАЧ()для преобразования. - Отрицательные значения: если конечная дата раньше начальной, результат будет отрицательным. Используйте
=АБС()или поменяйте местами даты. - Некорректный учёт високосных лет: функции
DATEDIFиРАЗНДАТсправляются с этим автоматически, но если вы используете ручные расчёты, не забудьте про 29 февраля. - Проблемы с временными зонами: Excel не учитывает часовые пояса. Для международных расчётов приведите все даты к одному поясу (например, UTC).
Ещё одна частая проблема — автоматическое преобразование дат. Например, если ввести 01-02-2026, Excel может интерпретировать это как 1 февраля или 2 января в зависимости от региональных настроек. Чтобы избежать путаницы, используйте формат ДД.ММ.ГГГГ или функцию =ДАТА():
=ДАТА(2026; 5; 15)
FAQ: Ответы на частые вопросы
Можно ли посчитать дни между датами в Google Таблицах?
Да, все описанные методы работают и в Google Таблицах, включая DATEDIF (в англоязычной версии) или РАЗНДАТ (в русскоязычной). Синтаксис идентичен Excel, но разделителем аргументов функции всегда является запятая (,), а не точка с запятой.
Как посчитать количество недель между датами?
Разделите количество дней на 7. Например: =DATEDIF(A1; B1; "D")/7. Для целых недель используйте =ЦЕЛОЕ(DATEDIF(A1; B1; "D")/7). Обратите внимание, что остаток дней (например, 3 дня из 10) будет отброшен.
Почему функция DATEDIF не работает в моём Excel?
Вероятные причины:
- Вы используете русскоязычную версию — попробуйте
РАЗНДАТ. - Опечатка в единице измерения (должно быть
"D","M"или"Y"в верхнем регистре). - Ячейки с датами отформатированы как текст. Используйте
=ДАТАЗНАЧ()для преобразования.
Как посчитать дни между датами с учётом только рабочих часов?
Для этого нужно:
- Вычислить общее количество дней (
=B1-A1). - Умножить на 24 (часы в день) и вычесть нерабочие часы. Например, при 8-часовом рабочем дне:
=(B1-A1)*8. - Исключить выходные с помощью
ЧИСТРАБДНИ.
Пример полной формулы: =ЧИСТРАБДНИ(A1; B1)*8 + ЕСЛИ(ИЛИ(ДЕНЬНЕД(A1;2)>5; ДЕНЬНЕД(B1;2)>5); 0; МИН(МОД(B1;1); МОД(A1;1))*24) (учитывает часы в первый и последний день).
Можно ли автоматически обновлять разницу между датой и сегодняшним днём?
Да, используйте функцию =СЕГОДНЯ() в комбинации с DATEDIF:
=DATEDIF("01.01.2026"; СЕГОДНЯ(); "D")
Чтобы формула обновлялась при каждом открытии файла, перейдите в Файл → Параметры → Формулы и установите режим вычислений "Автоматически".