Как в Excel посчитать количество лет и месяцев между двумя датами: полное руководство

Работа с датами в Microsoft Excel — одна из самых востребованных задач при анализе данных. Чаще всего пользователям нужно вычислить разницу между двумя датами: возраст сотрудников, срок службы оборудования или продолжительность проектов. Но стандартное вычитание дат даёт результат в днях, а как получить разницу в годах и месяцах — вопрос, который вызывает затруднения даже у опытных пользователей.

В этой статье мы разберём 5 проверенных способов расчёта разницы между датами с учётом лет, месяцев и дней — от простых формул до универсальных решений для любых версий Excel (включая Excel 365, Excel 2019 и Excel Online). Вы узнаете, как избежать ошибок с високосными годами, как корректно учитывать неполные месяцы и почему иногда результат отличается от ожидаемого.

Особое внимание уделим формуле ДРОБЬ.ГОД — самому надёжному методу, который работает даже с отрицательными датами. А для тех, кто любит автоматизацию, покажем, как создать динамическую таблицу с расчётом стажа сотрудников в годах, месяцах и днях.

📊 Как часто вы работаете с датами в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

1. Почему простое вычитание дат не работает

Многие пользователи пытаются вычесть одну дату из другой и получить результат в годах. Например, вводят формулу =B2-A2, где A2 — дата начала, а B2 — дата окончания. Но вместо ожидаемых "3 года 5 месяцев" Excel выдаёт число вроде 1245. Почему так происходит?

Дело в том, что Excel хранит даты как порядковые номера, где 1 соответствует 1 января 1900 года. При вычитании программа возвращает разницу в днях, а не в годах или месяцах. Например, разница между 01.01.2020 и 01.01.2023 составит 1096 дней, но никак не "3 года".

Ещё одна ловушка — формат ячейки. Если вы не измените формат результата на Общий или Числовой, Excel может отобразить дату вместо количества дней. Например, формула =B2-A2 при формате ячейки Дата покажет 15.07.1904 вместо 1245.

⚠️ Внимание: Если в ячейке отображается ###### вместо числа, значит столбец слишком узкий. Расширьте его или измените формат на Общий.

Чтобы преобразовать дни в годы, нужно разделить результат на 365. Но и это решение не идеально:

  • 🔹 Не учитывает високосные годы (366 дней вместо 365).
  • 🔹 Не показывает месяцы и дни отдельно.
  • 🔹 Даёт приблизительный результат (например, 3,01 вместо "3 года и 1 месяц").

2. Способ 1: Формула ДРОБЬ.ГОД — самый точный метод

Функция ДРОБЬ.ГОД (англ. DATEDIF) специально создана для расчёта разницы между датами. Она возвращает результат в годах, месяцах или днях в зависимости от указанного параметра. Синтаксис:

=ДРОБЬ.ГОД(начальная_дата; конечная_дата; единица_измерения)

Где единица_измерения может принимать значения:

  • 📅 "Y" — полные годы.
  • 📆 "M" — полные месяцы (без учёта лет).
  • 📇 "D" — дни (без учёта месяцев и лет).
  • 📅📆 "YM" — месяцы без учёта лет и дней.
  • 📅📇 "MD" — дни без учёта месяцев и лет.
  • 📅📆📇 "YD" — дни без учёта лет, но с учётом месяцев.

Пример: чтобы получить разницу между 15.03.2020 и 20.08.2023 в виде "3 года 5 месяцев 5 дней", используйте три формулы:

=ДРОБЬ.ГОД(A2; B2; "Y")  // Вернёт 3 (года)

=ДРОБЬ.ГОД(A2; B2; "YM") // Вернёт 5 (месяцев)

=ДРОБЬ.ГОД(A2; B2; "MD") // Вернёт 5 (дней)

Убедитесь, что обе даты в формате даты (не текст)

Используйте английскую раскладку для параметров ("Y", "M", "D")

Проверьте, что конечная дата не раньше начальной

Примените формат ячейки "Общий" для результата-->

⚠️ Внимание: Функция ДРОБЬ.ГОД не документирована в официальной справке Microsoft, но работает во всех версиях Excel. В некоторых локализациях её название может отличаться (например, DATEDIFF в английской версии).

Единственный метод, который корректно учитывает високосные годы и неполные месяцы без дополнительных вычислений.

3. Способ 2: Разделение на годы, месяцы и дни с помощью ЦЕЛОЕ и ОСТАТ

Если функция ДРОБЬ.ГОД по какой-то причине недоступна, можно использовать комбинацию функций ЦЕЛОЕ (англ. INT) и ОСТАТ (англ. MOD). Этот метод требует больше действий, но даёт такой же точный результат.

Алгоритм расчёта:

  1. Вычислите общую разницу в днях: =B2-A2.
  2. Получите количество полных лет: =ЦЕЛОЕ((B2-A2)/365).
  3. Найдите остаток дней после вычитания лет: =ОСТАТ((B2-A2); 365).
  4. Получите количество полных месяцев из остатка: =ЦЕЛОЕ(ОСТАТ((B2-A2); 365)/30).
  5. Найдите оставшиеся дни: =ОСТАТ(ОСТАТ((B2-A2); 365); 30).

Пример для дат 01.01.2020 и 15.08.2023:

ФормулаРезультатПояснение
=B2-A21306Общая разница в днях
=ЦЕЛОЕ(1306/365)3Полных года
=ОСТАТ(1306; 365)206Остаток дней после вычитания лет
=ЦЕЛОЕ(206/30)6Полных месяцев
=ОСТАТ(206; 30)26Оставшиеся дни

Итог: 3 года 6 месяцев 26 дней. Обратите внимание, что этот метод даёт приблизительный результат, так как месяцы считаются как 30 дней, а годы — как 365 дней (без учёта високосных).

4. Способ 3: Использование функции РАЗНДАТ (для новых версий Excel)

В Excel 365 и Excel 2021 появилась новая функция РАЗНДАТ (англ. DATEDIFF), которая упрощает расчёт разницы между датами. Её синтаксис:

=РАЗНДАТ(начальная_дата; конечная_дата; единица_измерения)

Преимущества РАЗНДАТ перед ДРОБЬ.ГОД:

  • 🔹 Поддерживает больше единиц измерения (например, недели "WW").
  • 🔹 Лучше документирована в справке Microsoft.
  • 🔹 Работает с отрицательными датами (если конечная дата раньше начальной).

Пример использования для расчёта полных лет и месяцев:

=РАЗНДАТ(A2; B2; "Y")  // Полные годы

=РАЗНДАТ(A2; B2; "YM") // Месяцы без учёта лет

=РАЗНДАТ(A2; B2; "MD") // Дни без учёта месяцев и лет

Однако у РАЗНДАТ есть особенность: если конечная дата меньше начальной, результат будет отрицательным. Чтобы этого избежать, используйте функцию АБС:

=АБС(РАЗНДАТ(A2; B2; "Y"))
Чем отличается РАЗНДАТ от ДРОБЬ.ГОД?

Функция РАЗНДАТ появилась позже и поддерживает больше параметров (например, "WW" для недель). Однако в некоторых локализациях Excel она может отсутствовать, тогда как ДРОБЬ.ГОД работает везде. Кроме того, РАЗНДАТ всегда возвращает целое число, а ДРОБЬ.ГОД может давать дробные результаты при использовании параметра "YD" или "MD".

5. Способ 4: Расчёт с учётом точного количества дней в месяце

Предыдущие методы приблизительно считают месяцы как 30 дней, но в реальности их длительность варьируется от 28 до 31 дня. Для точного расчёта можно использовать комбинацию функций ДАТА, ГОД, МЕСЯЦ и ДЕНЬ.

Алгоритм:

  1. Вычислите полные годы: =ГОД(B2)-ГОД(A2)-ЕСЛИ(ИЛИ(МЕСЯЦ(B2)<МЕСЯЦ(A2); И(МЕСЯЦ(B2)=МЕСЯЦ(A2); ДЕНЬ(B2)<ДЕНЬ(A2))); 1; 0).
  2. Вычислите полные месяцы: =ЕСЛИ(ДЕНЬ(B2)>=ДЕНЬ(A2); МЕСЯЦ(B2)-МЕСЯЦ(A2); МЕСЯЦ(B2)-МЕСЯЦ(A2)-1).
  3. Вычислите дни: =ЕСЛИ(ДЕНЬ(B2)>=ДЕНЬ(A2); ДЕНЬ(B2)-ДЕНЬ(A2); ДЕНЬ(B2)-ДЕНЬ(A2)+ДЕНЬ(ДАТА(ГОД(A2); МЕСЯЦ(A2)+1; 0))).

Пример для дат 28.02.2020 (високосный год) и 15.03.2023:

  • 🔹 Полных лет: 3.
  • 🔹 Полных месяцев: 0 (так как 15.03 < 28.02 с учётом високосного года).
  • 🔹 Дней: 15 (с учётом того, что в феврале 2020 было 29 дней).

Этот метод сложнее предыдущих, но даёт максимально точный результат с учётом реальной продолжительности месяцев.

6. Способ 5: Динамическая таблица для расчёта стажа

Если вам нужно рассчитать разницу между датами для большого количества записей (например, стаж сотрудников), удобно создать динамическую таблицу. Для этого:

  1. Создайте столбцы: Дата начала, Дата окончания, Лет, Месяцев, Дней.
  2. В столбце Лет введите: =ДРОБЬ.ГОД(A2; B2; "Y").
  3. В столбце Месяцев: =ДРОБЬ.ГОД(A2; B2; "YM").
  4. В столбце Дней: =ДРОБЬ.ГОД(A2; B2; "MD").
  5. Добавьте столбец Итог с формулой: =ЕСЛИ(A2=""; ""; ДРОБЬ.ГОД(A2; B2; "Y") & " г. " & ДРОБЬ.ГОД(A2; B2; "YM") & " м. " & ДРОБЬ.ГОД(A2; B2; "MD") & " д.").

Пример таблицы:

Дата началаДата окончанияЛетМесяцевДнейИтог
15.05.201820.11.20235655 г. 6 м. 5 д.
01.01.202231.12.2022011300 г. 11 м. 30 д.
10.03.202010.03.20233003 г. 0 м. 0 д.

7. Распространённые ошибки и как их избежать

Даже опытные пользователи Excel иногда сталкиваются с неожиданными результатами при работе с датами. Вот самые частые ошибки и способы их исправления:

Ошибка 1: Результат в формате даты вместо числа

Если формула =B2-A2 возвращает дату вроде 15.07.1904, значит формат ячейки установлен как Дата. Решение: выделите ячейку → ГлавнаяФорматОбщий.

Ошибка 2: Неправильный порядок дат

Если конечная дата раньше начальной, функции ДРОБЬ.ГОД и РАЗНДАТ могут вернуть отрицательное значение или ошибку. Решение: используйте АБС или проверку ЕСЛИ:

=ЕСЛИ(B2

Ошибка 3: Даты в текстовом формате

Если даты введены как текст (например, '15.05.2023'), Excel не сможет их обработать. Решение: преобразуйте текст в дату с помощью ДАТАЗНАЧ:

=ДАТАЗНАЧ(A2)
⚠️ Внимание: Функция ДАТАЗНАЧ работает только с форматом даты, принятым в вашей системе (например, дд.мм.гггг для России). Если дата в формате мм/дд/гггг, используйте ПОДСТАВИТЬ для замены разделителей.

8. Автоматизация: VBA-скрипт для расчёта разницы

Если вам нужно часто рассчитывать разницу между датами, можно создать пользовательскую функцию на VBA. Откройте редактор VBA (Alt+F11), вставьте новый модуль и добавьте код:

Function YearsAndMonths(startDate As Date, endDate As Date) As String

Dim years As Integer, months As Integer, days As Integer

years = DateDiff("yyyy", startDate, endDate)

If DateSerial(Year(startDate) + years, Month(startDate), Day(startDate)) > endDate Then

years = years - 1

End If

months = DateDiff("m", DateSerial(Year(startDate) + years, Month(startDate), Day(startDate)), endDate)

If DateSerial(Year(startDate) + years, Month(startDate) + months, Day(startDate)) > endDate Then

months = months - 1

End If

days = DateDiff("d", DateSerial(Year(startDate) + years, Month(startDate) + months, Day(startDate)), endDate)

YearsAndMonths = years & " г. " & months & " м. " & days & " д."

End Function

Теперь в Excel можно использовать эту функцию как обычную формулу:

=YearsAndMonths(A2; B2)

Преимущества VBA-решения:

  • 🔹 Учитывает реальную продолжительность месяцев.
  • 🔹 Возвращает результат в удобном текстовом формате.
  • 🔹 Работает быстрее, чем сложные формулы.

FAQ: Ответы на частые вопросы

Можно ли посчитать разницу между датами в Google Таблицах?

Да, в Google Sheets также работает функция ДРОБЬ.ГОД (англ. DATEDIF). Синтаксис идентичен Excel. Например:

=DATEDIF(A2; B2; "Y")

Также можно использовать =YEAR(B2)-YEAR(A2) для полных лет, но этот метод не учитывает месяцы и дни.

Почему функция ДРОБЬ.ГОД возвращает неверное количество месяцев?

Функция ДРОБЬ.ГОД с параметром "YM" считает месяцы без учёта дней. Например, разница между 31.01.2023 и 28.02.2023 составит 0 месяцев, так как 28.02 < 31.01. Чтобы получить точный результат, используйте комбинацию параметров:

=ДРОБЬ.ГОД(A2; B2; "Y") & " г. " & ДРОБЬ.ГОД(A2; B2; "YM") & " м. " & ДРОБЬ.ГОД(A2; B2; "MD") & " д."
Как посчитать разницу между датой и сегодняшним днём?

Используйте функцию СЕГОДНЯ (англ. TODAY) в качестве конечной даты:

=ДРОБЬ.ГОД(A2; СЕГОДНЯ(); "Y")

Обратите внимание, что функция СЕГОДНЯ пересчитывается при каждом открытии файла.

Можно ли посчитать разницу в неделях?

Да, для этого используйте функцию РАЗНДАТ с параметром "WW"Excel 365 и Excel 2021):

=РАЗНДАТ(A2; B2; "WW")

В старых версиях Excel разделите разницу в днях на 7:

=ЦЕЛОЕ((B2-A2)/7)
Как посчитать возраст человека с учётом дня рождения?

Используйте формулу:

=ДРОБЬ.ГОД(A2; СЕГОДНЯ(); "Y")

Чтобы узнать, был ли уже день рождения в этом году, добавьте проверку:

=ЕСЛИ(ИЛИ(МЕСЯЦ(СЕГОДНЯ())>МЕСЯЦ(A2); И(МЕСЯЦ(СЕГОДНЯ())=МЕСЯЦ(A2); ДЕНЬ(СЕГОДНЯ())>=ДЕНЬ(A2))); ДРОБЬ.ГОД(A2; СЕГОДНЯ(); "Y"); ДРОБЬ.ГОД(A2; СЕГОДНЯ(); "Y")-1)