Почему вычитание дат в Excel — это не так просто, как кажется
На первый взгляд, задача посчитать возраст по дате рождения в Microsoft Excel или Google Таблицах кажется тривиальной: взял две даты, вычел одну из другой — получил результат. Но на практике пользователи сталкиваются с массой нюансов: от некорректного отображения результата в формате даты вместо лет до ошибок при работе с отрицательными значениями. Например, если просто вычесть 15.05.2000 из 10.03.2026, Excel вернёт число 8477 — количество дней между датами, а не возраст в годах.
Проблема усложняется, когда нужно учитывать точные интервалы: полных лет, месяцев и дней (например, "25 лет, 3 месяца и 10 дней"). Стандартные функции вычитания не справляются с такой задачей без дополнительных формул. Кроме того, многие пользователи не знают о специализированной функции РАЗНДАТ (или DATEDIF в английской версии), которая скрыта в интерфейсе Excel, но решает 90% проблем с расчётом возраста. В этой статье мы разберём все рабочие методы — от базовых до продвинутых, — а также покажем, как избежать типичных ошибок при работе с датами.
Способ 1: Простое вычитание дат (для получения дней)
Самый очевидный метод — вычесть одну дату из другой напрямую. Это работает, если вам нужно узнать количество дней между двумя датами. Например, чтобы посчитать, сколько дней прошло с момента рождения до сегодняшнего дня.
Формула выглядит так:
=B2-A2
Где A2 — ячейка с датой рождения, а B2 — с текущей датой. Важно: обе ячейки должны быть отформатированы как дата (выделите их и выберите формат "Дата" в меню Главная → Формат ячеек).
- ✅ Плюсы: проще некуда, работает во всех версиях Excel.
- ❌ Минусы: результат в днях, а не в годах; не учитывает месяцы и годы.
Способ 2: Функция РАЗНДАТ (DATEDIF) — универсальное решение
Функция РАЗНДАТ (или DATEDIF в английской версии Excel) специально создана для расчёта разницы между датами в годах, месяцах или днях. Она не отображается в списке функций Excel, но работает во всех версиях программы, включая Excel 365 и Excel 2019.
Синтаксис функции:
=РАЗНДАТ(дата_начала; дата_конца; единица_измерения)
Где единица_измерения может принимать следующие значения:
| Код | Значение | Пример результата |
|---|---|---|
"Y" |
Полных лет | Для дат 15.05.2000 и 10.03.2026 вернёт 23 (не 24, так как день рождения ещё не наступил). |
"M" |
Полных месяцев (без учёта лет и дней) | Для тех же дат вернёт 280. |
"D" |
Дней (без учёта месяцев и лет) | Вернёт 8477. |
"YM" |
Месяцев без учёта полных лет | Для 15.05.2000 и 10.03.2026 вернёт 9 (месяцев с последнего дня рождения). |
"MD" |
Дней без учёта полных месяцев и лет | Вернёт 24 (дней с 15 февраля 2026). |
Пример формулы для расчёта полных лет:
=РАЗНДАТ(A2; B2; "Y")
Способ 3: Комбинация функций для точного возраста (годы, месяцы, дни)
Если нужно получить возраст в формате "23 года, 9 месяцев и 24 дня", одной функции РАЗНДАТ будет недостаточно. Здесь потребуется комбинация из трёх формул:
- Годы:
=РАЗНДАТ(A2; B2; "Y") - Месяцы:
=РАЗНДАТ(A2; B2; "YM") - Дни:
=РАЗНДАТ(A2; B2; "MD")
Чтобы объединить их в одну ячейку с текстом, используйте функцию ТЕКСТ или оператор конкатенации &:
=РАЗНДАТ(A2; B2; "Y") & " г., " & РАЗНДАТ(A2; B2; "YM") & " мес., " & РАЗНДАТ(A2; B2; "MD") & " дн."
Убедитесь, что ячейки с датами отформатированы как "Дата"|Проверьте, что дата конца новее даты начала|Используйте английские кавычки для аргументов ("Y", а не «Y»)-->
Способ 4: Автоматический расчёт возраста с сегодняшней датой
Часто требуется посчитать возраст на текущую дату, без ручного ввода сегодняшнего дня. Для этого вместо второй даты используйте функцию СЕГОДНЯ():
=РАЗНДАТ(A2; СЕГОДНЯ(); "Y")
Эта формула будет автоматически обновляться каждый день, показывая актуальный возраст. Обратите внимание: функция СЕГОДНЯ() не имеет аргументов и всегда возвращает текущую дату согласно системным настройкам компьютера.
Что делать, если функция СЕГОДНЯ() не обновляется?
Если дата "застыла" и не меняется при открытии файла, проверьте:
1. Включён ли в Excel режим автоматического пересчёта (Формулы → Параметры вычислений → Автоматически).
2. Не открыт ли файл в режиме "Только для чтения".
3. Не сохранён ли файл в формате .xls (старая версия Excel), где некоторые функции работают некорректно.
Важно: функция СЕГОДНЯ() может давать сбой в Google Таблицах при открытии файла на мобильных устройствах. В этом случае используйте альтернативу: =ТДАТА().
Способ 5: Расчёт возраста с учётом будущих дат (для планирования)
Иногда нужно узнать, сколько лет будет человеку на конкретную будущую дату (например, на 1 января 2026 года). В этом случае используйте ту же функцию РАЗНДАТ, но вместо СЕГОДНЯ() укажите целевую дату:
=РАЗНДАТ(A2; "01.01.2026"; "Y")
Если будущая дата указана в отдельной ячейке (например, C2), формула примет вид:
=РАЗНДАТ(A2; C2; "Y")
Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при работе с датами. Вот самые распространённые из них и способы их решения:
⚠️ Внимание: Если в ячейке с датой отображается набор символов (например,45342), это значит, что формат ячейки установлен как "Общий". Исправьте его на "Дата" в менюГлавная → Формат → Формат ячеек.
- 🔴 Ошибка #ИМЯ?: Возникает, если в функции
РАЗНДАТиспользованы русские кавычки («») вместо английских (""). Замените их. - 🔴 Ошибка #ЧИСЛО!: Появляется, если дата конца раньше даты начала. Проверьте порядок аргументов.
- 🔴 Некорректный результат в годах: Функция
РАЗНДАТсчитает полные годы. Если день рождения ещё не наступил, она вернёт меньшее значение. Например, для дат31.12.2000и01.01.2026результат будет22, а не23.
Ещё одна частая проблема — отрицательные значения при вычитании дат. Excel не умеет автоматически конвертировать их в положительные, поэтому если вам нужно посчитать, сколько дней осталось до события, используйте функцию АБС:
=АБС(B2-A2)
Продвинутые приёмы: условное форматирование для возрастных групп
Расчёт возраста — только половина задачи. Часто требуется визуализировать данные, например, выделить цветом ячейки с возрастом старше 18 лет или младше 3 лет. Для этого используйте условное форматирование:
- Выделите ячейки с возрастом (например, столбец
C). - Перейдите в
Главная → Условное форматирование → Создать правило. - Выберите тип правила "Форматировать только ячейки, которые содержат".
- В поле "Форматировать только ячейки с" укажите условие, например:
=C1>=18. - Задайте цвет заливки (например, зелёный для совершеннолетних).
Для более сложных условий (например, выделение возраста от 3 до 6 лет) используйте формулы в условном форматировании:
=И(C1>=3; C1<=6)
FAQ: Ответы на частые вопросы
Можно ли в Excel посчитать возраст в месяцах с учётом дней?
Да, для этого используйте комбинацию функций РАЗНДАТ с аргументом "M" (полные месяцы) и "MD" (дополнительные дни). Например:
=РАЗНДАТ(A2; B2; "M") & " мес. и " & РАЗНДАТ(A2; B2; "MD") & " дн."
Это вернёт результат в формате "280 мес. и 24 дн.".
Почему функция РАЗНДАТ не работает в моём Excel?
Причины могут быть следующими:
- Вы используете русские кавычки («») вместо английских ("").
- Ячейки с датами не отформатированы как "Дата".
- Версия Excel старше 2000 года (в них функция может отсутствовать).
- Файл сохранён в формате
.csvили.txt— сохраните его как.xlsx.
Проверьте также регистр: функция должна называться именно РАЗНДАТ (заглавные буквы).
Как посчитать средний возраст группы людей в Excel?
Сначала рассчитайте возраст каждого человека с помощью РАЗНДАТ, затем используйте функцию СРЗНАЧ:
=СРЗНАЧ(C2:C100)
Где C2:C100 — диапазон с возрастом в годах. Убедитесь, что в столбце нет пустых ячеек или ошибок, иначе результат будет некорректным.
Можно ли автоматически обновлять возраст в Google Таблицах?
Да, в Google Таблицах также работает функция =DATEDIF (аналог РАЗНДАТ), а для текущей даты используйте =TODAY(). Формулы обновляются автоматически при каждом открытии файла или изменении данных.
Пример:
=DATEDIF(A2; TODAY(); "Y")
Как посчитать возраст в Excel на определённую дату в прошлом?
Используйте функцию РАЗНДАТ, указав в качестве второй даты целевой день. Например, чтобы узнать, сколько лет было человеку на 01.01.2020:
=РАЗНДАТ(A2; "01.01.2020"; "Y")
Если дата указана в другой ячейке (например, D2), формула примет вид:
=РАЗНДАТ(A2; D2; "Y")