Почему Excel считает даты не так, как вы ожидаете?
Вы когда-нибудь пытались вычесть одну дату из другой в Excel, а вместо ожидаемого количества дней получали странное пятизначное число? Это не ошибка программы — так работает внутренняя логика Microsoft Excel. Дело в том, что программа хранит даты не как текст, а как последовательные числа, где 1 января 1900 года равно единице. Каждый новый день увеличивает это число на единицу. Например, 2 января 1900 года — это 2, а сегодняшняя дата — это число порядка 45000+.
Когда вы вводите в ячейку 15.05.2026, Excel воспринимает это не как текст, а как число 45415 (если система использует формат дат с 1900 года). Именно поэтому простая разность =B2-A2 даёт не дни, а разницу между этими внутренними числами. Но не волнуйтесь: мы научим вас превращать эти числа в удобные для восприятия дни, месяцы и даже годы — с учётом високосных лет и разных форматов дат.
В этой статье вы найдёте:
- 🔹 5 рабочих способов посчитать разницу между датами (от простого к сложному)
- 🔹 Как учитывать только рабочие дни (исключая выходные и праздники)
- 🔹 Формулы для расчёта полных лет, месяцев и дней по отдельности
- 🔹 Типичные ошибки и как их избежать (включая проблему с 1900 годом)
Способ 1: Простое вычитание для расчёта дней
Самый базовый метод — вычесть одну дату из другой. Он подходит, если вам нужно узнать количество полных дней между двумя датами, включая оба конца периода. Формула предельно проста:
=КОНДАТА - НАЧДАТА
Где:
- 📅
КОНДАТА— ячейка с конечной датой (например,B2) - 📅
НАЧДАТА— ячейка с начальной датой (например,A2)
Пример: если в A2 у вас 01.01.2026, а в B2 — 15.01.2026, формула вернёт 14. Но здесь есть нюанс: Excel по умолчанию отображает результат как дату (например, 14.01.1900). Чтобы увидеть именно дни, измените формат ячейки с результатом на "Общий" или "Числовой".
Способ 2: Функция РАЗНДАТ для точного расчёта лет, месяцев и дней
Функция РАЗНДАТ (или DATEDIF в английской версии) — это скрытая жемчужина Excel. Она не отображается в списке функций, но работает во всех версиях программы. Её главный плюс — возможность рассчитать разницу не только в днях, но и в полных месяцах или годах, с учётом календарных особенностей.
Синтаксис функции:
=РАЗНДАТ(нач_дата; кон_дата; единица)
Где единица — это код, определяющий, что именно считать:
| Код | Что считает | Пример результата |
|---|---|---|
"D" |
Количество дней | 365 (дней между 01.01.2023 и 01.01.2026) |
"M" |
Количество полных месяцев | 11 (между 15.01.2023 и 10.12.2023) |
"Y" |
Количество полных лет | 2 (между 01.01.2020 и 31.12.2022) |
"YM" |
Месяцы без учёта лет | 3 (между 15.01.2023 и 15.04.2023) |
"MD" |
Дни без учёта месяцев и лет | 5 (между 25.01.2023 и 30.01.2023) |
Пример использования: чтобы узнать, сколько полных лет прошло с 10.05.1990 до 10.05.2026, используйте:
=РАЗНДАТ("10.05.1990"; "10.05.2026"; "Y")
Убедитесь, что даты введены как даты, а не как текст|Проверьте регистр букв в коде единицы (например, "D", а не "д")|Используйте точку с запятой (;) как разделитель в русскоязычной версии Excel|Для английской версии замените точку с запятой на запятую
-->
⚠️ Внимание: ФункцияРАЗНДАТне учитывает високосные годы при расчёте месяцев ("M"). Например, разница между 29.02.2020 и 28.02.2021 по коду"M"будет11месяцев, хотя фактически прошёл 1 год.
Способ 3: Расчёт рабочих дней (исключая выходные)
Если вам нужно посчитать только рабочие дни, исключив субботы и воскресенья, используйте функцию ЧИСТРАБДНИ (или NETWORKDAYS в английской версии). Она автоматически пропускает выходные и опционально может исключать праздники.
Базовый синтаксис:
=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])
Пример: чтобы узнать количество рабочих дней между 01.01.2026 и 31.01.2026, используйте:
=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026")
Если в январе были праздники (например, 1-8 января), укажите их как диапазон ячеек или массив:
=ЧИСТРАБДНИ("01.01.2026"; "31.01.2026"; {"01.01.2026";"02.01.2026";"07.01.2026"})
Ежедневно|Несколько раз в неделю|Редко, по необходимости|Никогда не пользовался этой функцией-->
Для расчёта рабочих дней между сегодняшней датой и будущей используйте функцию СЕГОДНЯ:
=ЧИСТРАБДНИ(СЕГОДНЯ(); "31.12.2026")
⚠️ Внимание: ФункцияЧИСТРАБДНИсчитает субботу и воскресенье выходными по умолчанию. Если у вас другой график (например, выходной — пятница), используйте функциюЧИСТРАБДНИ.МЕЖД(доступна с Excel 2010), где можно указать свои выходные дни.
Способ 4: Разделение разницы на годы, месяцы и дни
Часто требуется вывести разницу между датами в формате "X лет, Y месяцев, Z дней". Для этого придётся комбинировать несколько функций. Вот универсальная формула:
=РАЗНДАТ(A2;B2;"Y") & " лет, " & РАЗНДАТ(A2;B2;"YM") & " мес., " & РАЗНДАТ(A2;B2;"MD") & " дн."
Где:
- 📌
A2— начальная дата - 📌
B2— конечная дата - 📌
&— оператор сцепления текста
Пример результата: "2 лет, 5 мес., 15 дн.". Если нужно убрать нулевые значения (например, чтобы не выводить "0 мес."), используйте функцию ЕСЛИ:
=РАЗНДАТ(A2;B2;"Y") & " лет" & ЕСЛИ(РАЗНДАТ(A2;B2;"YM")>0; ", " & РАЗНДАТ(A2;B2;"YM") & " мес."; "") & ЕСЛИ(РАЗНДАТ(A2;B2;"MD")>0; ", " & РАЗНДАТ(A2;B2;"MD") & " дн."; "")
Почему формула может показывать неточные месяцы?
Функция РАЗНДАТ считает полные месяцы исходя из календарных дат, а не из количества дней. Например, разница между 31.01.2026 и 28.02.2026 по коду "M" будет 0 месяцев, потому что 28.02 — это не полный месяц после 31.01. Чтобы избежать этого, используйте комбинацию "Y", "YM" и "MD".
Способ 5: Расчёт разницы с учётом времени (дни + часы)
Если ваши даты включают не только день, но и время (например, 15.05.2026 14:30), обычное вычитание даст результат в днях с дробной частью. Чтобы преобразовать эту дробь в часы, минуты или секунды, используйте:
- 🕒 Часы:
= (КОНДАТА - НАЧДАТА) * 24 - 🕒 Минуты:
= (КОНДАТА - НАЧДАТА) 24 60 - 🕒 Секунды:
= (КОНДАТА - НАЧДАТА) 24 60 * 60
Пример: если в A2 у вас 15.05.2026 09:00, а в B2 — 16.05.2026 17:30, формула для часов вернёт 32.5 (1 сутки и 8.5 часов = 32.5 часа).
Чтобы вывести результат в формате "X дней, Y часов", используйте:
=ЦЕЛОЕ(B2-A2) & " дн., " & ОСТАТ(B2-A2;1)*24 & " ч."
⚠️ Внимание: При работе с временем убедитесь, что ячейки имеют формат "Дата" или "Дата и время". Если Excel воспринимает ваши данные как текст, формулы не будут работать. Проверьте формат через Главная → Формат → Формат ячеек.
Типичные ошибки и как их исправить
Даже опытные пользователи Excel сталкиваются с ошибками при работе с датами. Вот самые распространённые проблемы и их решения:
-
Ошибка #ЗНАЧ! при вычитании дат
Причина: одна или обе даты введены как текст, а не как дата.
Решение: Преобразуйте текст в дату с помощью функции
=ДАТАЗНАЧ(A2)или измените формат ячейки на "Дата". -
Неправильный результат в функции РАЗНДАТ
Причина: использован неверный код единицы (например,
"d"вместо"D").Решение: Проверьте регистр букв — коды чувствительны к регистру!
-
Отрицательное количество дней
Причина: конечная дата раньше начальной.
Решение: Поменяйте даты местами или используйте функцию
=АБС(КОНДАТА - НАЧДАТА), чтобы получить абсолютное значение.
Важно: Excel для Windows и Excel для Mac используют разные стартовые даты: 1900 год и 1904 год соответственно. Если вы переносите файл между платформами, разница в датах может сбиться на 4 года! Чтобы проверить систему дат в вашем Excel, введите в ячейку =ДАТА(1900;1;1) — если результат 1, у вас система 1900 года; если 0, то 1904 года.
FAQ: Ответы на частые вопросы
Можно ли посчитать разницу между датами в Google Таблицах?
Да, все описанные функции работают и в Google Sheets, за исключением РАЗНДАТ — там она называется DATEDIF (без перевода). Синтаксис идентичен. Также в Google Таблицах есть аналог ЧИСТРАБДНИ — функция NETWORKDAYS.
Как посчитать количество недель между датами?
Разделите разницу в днях на 7:
=ЦЕЛОЕ((КОНДАТА - НАЧДАТА)/7)
Для неполных недель используйте:
= (КОНДАТА - НАЧДАТА)/7
Почему функция РАЗНДАТ не работает в моём Excel?
Причины могут быть следующие:
- Вы используете английскую версию Excel — замените
РАЗНДАТнаDATEDIF. - Ошибка в синтаксисе: проверьте разделители (точка с запятой для русского Excel, запятая для английского).
- Даты введены как текст — преобразуйте их в даты с помощью
ДАТАЗНАЧ.
Как посчитать возраст человека по дате рождения?
Используйте комбинацию функций:
=РАЗНДАТ(датарождения; СЕГОДНЯ(); "Y")
Для вывода в формате "X лет, Y месяцев":
=РАЗНДАТ(A2;СЕГОДНЯ();"Y") & " лет, " & РАЗНДАТ(A2;СЕГОДНЯ();"YM") & " мес."
Можно ли автоматически обновлять разницу при изменении дат?
Да, если вы используете функции с динамическими ссылками (например, СЕГОДНЯ()). Чтобы формулы пересчитывались автоматически, проверьте настройки:
- Перейдите в
Формулы → Параметры вычислений. - Выберите "Автоматически" (если стоит "Вручную", формулы не будут обновляться).