Расчёт полных лет между двумя датами — одна из самых востребованных задач в Microsoft Excel и Google Таблицах.hether вы ведёте кадровый учёт, рассчитываете амортизацию оборудования или просто хотите узнать, сколько лет прошло с важного события, точные вычисления с датами экономят время и исключают ошибки. Но стандартные функции вроде ДАТАРАЗН часто дают неверный результат, если не учитывать нюансы с днём рождения или окончанием периода.
В этой статье мы разберём 5 проверенных способов, как посчитать полные года в Excel — от простейших формул до универсальных решений для сложных случаев (например, когда дата окончания ещё не наступила). Вы узнаете, какие функции использовать для возраста сотрудников, срока службы техники или финансовых расчётов, а также как избежать типичных ошибок при работе с датами.
Почему стандартная функция ДАТАРАЗН не всегда подходит
Многие пользователи сначала пытаются использовать функцию ДАТАРАЗН (DATEDIF в английской версии), которая как раз предназначена для вычисления разницы между датами. Однако у неё есть критические ограничения:
- 🔴 Не документирована в официальной справке Excel (поэтому автозаполнение не работает).
- 🔴 Округляет результаты в меньшую сторону, если день окончания ещё не наступил (например, для даты рождения 15.05.1990 и текущей даты 10.05.2026 функция вернёт 33 года вместо 34).
- 🔴 Не учитывает високосные годы при расчёте в месяцах или днях.
Пример проблемы: если сегодня 10.05.2026, а дата рождения — 15.05.1990, формула =ДАТАРАЗН(A1;СЕГОДНЯ();"y") вернёт 33, хотя полных лет ещё нет. Это критично для кадровых систем, где возраст влияет на льготы или пенсионные отчисления.
Метод 1: Формула с ЦЕЛОЕ и ГОД (для текущей даты)
Самый надёжный способ посчитать полные года между датой рождения (или другой стартовой датой) и сегодняшним днём — комбинация функций ЦЕЛОЕ и ГОД. Формула выглядит так:
=ЦЕЛОЕ((СЕГОДНЯ()-A1)/365,25)
Где A1 — ячейка с датой рождения. Почему 365,25? Потому что средняя длительность года с учётом високосных дней — 365,2425 суток (это значение используется в астрономии для тропического года). Округление через ЦЕЛОЕ гарантирует, что мы получим только полные года.
Пример: если в A1 записано 15.05.1990, а сегодня 10.05.2026, формула вернёт 33 — именно столько полных лет прошло на момент расчёта. Этот метод точнее ДАТАРАЗН, так как учитывает фактическое количество дней.
Убедитесь, что дата в ячейке A1 введена как дата (не текст)|Используйте формат ячейки "Дата" для корректного отображения|Для прошлых дат замените СЕГОДНЯ() на фиксированную дату (например, B1)|Проверьте результат на граничных значениях (например, 29.02 в високосный год)-->
Метод 2: Универсальная формула для любых двух дат
Если нужно посчитать полные года между произвольными датами (не обязательно текущей), используйте эту формулу:
=ЕСЛИ(ИЛИ(A1="";B1="");"";ЕСЛИ(ДАТА(ГОД(B1);МЕСЯЦ(A1);ДЕНЬ(A1))>B1;ГОД(B1)-ГОД(A1)-1;ГОД(B1)-ГОД(A1)))
Разберём логику:
- Сначала проверяем, что обе ячейки (
A1иB1) не пустые. - Создаём "виртуальную" дату в году окончания (
B1), но с днём и месяцем из начальной даты (A1). - Если эта виртуальная дата позже реальной даты окончания (
B1), значит, полных лет на один меньше.
Пример: начальная дата — 31.12.2020, конечная — 01.01.2026. Виртуальная дата будет 31.12.2023, что позже 01.01.2026, поэтому формула вернёт 2 (а не 3).
Почему не работает формула с ДАТАРАЗН для будущих дат?
Функция ДАТАРАЗН возвращает ошибку, если дата окончания раньше начальной. Например, =ДАТАРАЗН("01.01.2026";"01.01.2026";"y") выдаст #ЧИСЛО!, хотя математически разница — -1 год. Универсальная формула из этого раздела корректно обрабатывает такие случаи.
Метод 3: Расчёт возраста с учётом месяца и дня (для кадровых систем)
В HR-системах часто требуется не только количество полных лет, но и точный возраст в годах, месяцах и днях. Для этого модифицируем предыдущую формулу:
=ДАТАРАЗН(A1;СЕГОДНЯ();"y") & " лет, " & ДАТАРАЗН(A1;СЕГОДНЯ();"ym") & " мес., " & ДАТАРАЗН(A1;СЕГОДНЯ();"md") & " дн."
Где:
"y"— полные года."ym"— полные месяцы после учёта полных лет."md"— полные дни после учёта лет и месяцев.
⚠️ Внимание: если вам нужно только количество полных лет (например, для проверки возраста 18+), используйте метод 1 или 2. Эта формула возвращает текстовый результат, который нельзя использовать в дальнейших вычислениях.
| Дата рождения | Текущая дата | Формула | Результат |
|---|---|---|---|
| 15.05.1990 | 10.05.2026 | =ДАТАРАЗН(A1;B1;"y") |
33 |
| 29.02.2000 | 01.03.2026 | =ЦЕЛОЕ((B1-A1)/365,25) |
24 |
| 31.12.2020 | 01.01.2026 | Универсальная формула | 2 |
Метод 4: Использование Power Query для массовых расчётов
Если вам нужно посчитать полные года для тысяч строк (например, в отчёте по сотрудникам или клиентам), ручной ввод формул неэффективен. В этом случае поможет Power Query — инструмент для преобразования данных в Excel.
Алгоритм действий:
- Выделите исходную таблицу с датами и нажмите
Данные → Из таблицы/диапазона(в Excel 2016+). - В редакторе Power Query добавьте настраиваемый столбец с формулой:
Date.From([Дата окончания]) - Date.From([Дата начала]) - Преобразуйте результат в годы, разделив на
365,25и применивNumber.IntegerDivide. - Загрузите данные обратно в Excel.
Преимущества метода:
- ⚡ Обрабатывает миллионы строк без замедления.
- 🔄 Автоматически обновляет результаты при изменении исходных данных.
- 📊 Позволяет добавлять дополнительные вычисления (например, категоризацию по возрастным группам).
Метод 5: VBA-скрипт для автоматизации (продвинутый уровень)
Если вы работаете с повторяющимися отчётами и хотите полностью автоматизировать процесс, напишите простую функцию на VBA. Откройте редактор (Alt + F11) и вставьте этот код:
Function FullYears(startDate As Date, endDate As Date) As Integer
Dim virtualEndDate As Date
virtualEndDate = DateSerial(Year(endDate), Month(startDate), Day(startDate))
If virtualEndDate > endDate Then
FullYears = Year(endDate) - Year(startDate) - 1
Else
FullYears = Year(endDate) - Year(startDate)
End If
End Function
Теперь в Excel можно использовать её как обычную формулу:
=FullYears(A1;B1), где A1 — начальная дата, B1 — конечная.
⚠️ Внимание: перед использованием VBA убедитесь, что в настройках Excel разрешено выполнение макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Включить все макросы). В корпоративных сетях этот параметр может быть заблокирован администратором.
Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчёте полных лет. Вот самые распространённые:
- Формат ячеек как текст: если дата введена как текст (например,
"15.05.1990"вместо15.05.1990), формулы не сработают. Проверьте формат ячейки (Числовой → Дата). - Игнорирование високосных лет: функции вроде
ДАТАРАЗНмогут ошибаться с датами 29 февраля. Используйте365,25для точности. - Неучёт временных зон: если даты приходят из разных источников (например, 1C и Excel), убедитесь, что они приведены к одному часовому поясу.
Чтобы проверить корректность расчётов, используйте тестовые случаи:
- 📅 Дата рождения
29.02.2000, текущая дата28.02.2026→ должно быть23(не 24!). - 📅 Начало периода
31.12.2020, конец01.01.2021→0полных лет.
FAQ: Ответы на частые вопросы
Можно ли посчитать полные года без использования формул?
Да, но это неудобно для больших данных. Вы можете вручную вычитать годы в столбце рядом (например, =ГОД(B1)-ГОД(A1)), а затем проверять условие с днём и месяцем через фильтр. Однако такой метод занимает много времени и чреват ошибками.
Почему моя формула возвращает отрицательное число?
Это происходит, если дата окончания раньше даты начала. Например, =ДАТАРАЗН("01.01.2026";"01.01.2026";"y") вернёт ошибку, а универсальная формула из Метода 2 — -1. Чтобы избежать этого, добавьте проверку:
=ЕСЛИ(B1
Как посчитать полные года в Google Таблицах?
Все формулы из этой статьи работают и в Google Sheets, за исключением ДАТАРАЗН — там она называется DATEDIF. Также в Google Таблицах нет Power Query, но можно использовать Apps Script для автоматизации (аналог VBA).
Можно ли учитывать только рабочие годы (исключая выходные)?
Для этого нужно комбинировать функции ДАТАРАЗН с ЧИСТРАБДНИ (NETWORKDAYS). Например:
=ЦЕЛОЕ(ЧИСТРАБДНИ(A1;B1)/260)
где 260 — среднее количество рабочих дней в году (5 дней × 52 недели). Однако этот метод приблизительный, так как не учитывает праздники.
Как округлять годы вверх (например, для расчёта страховки)?
Замените ЦЕЛОЕ на ОКРУГЛВВЕРХ:
=ОКРУГЛВВЕРХ((СЕГОДНЯ()-A1)/365,25;0)
Эта формула вернёт 34 для даты рождения 15.05.1990 и текущей даты 10.05.2026 (даже если полных лет ещё 33).