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

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

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

Если вы никогда не работали с датами в Excel, начните с первого раздела — там объяснено, почему 20.12.2023 - 15.12.2023 ≠ 5 дней в некоторых случаях. Опытным пользователям рекомендуем сразу перейти к сравнению функций DATEDIF и ДАТАРАЗН (раздел 4) — там раскрыты ключевые различия, которые влияют на точность расчётов.

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

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

На первый взгляд, расчёт разницы между датами в Excel элементарен: достаточно вычесть одну дату из другой. Например, формула =B2-A2, где A2 содержит 10.01.2026, а B220.01.2026, вернёт значение 10. Но что если результат отображается как 45689 или 10.01.1900? Причина кроется в внутреннем представлении дат.

Excel хранит даты как порядковые номера, где 1 января 1900 года = 1, а каждое последующее число — это количество дней с этой даты. Когда вы вычитаете одну дату из другой, программа возвращает разницу в днях, но формат ячейки может искажать отображение. Если ячейка с результатом имеет общий формат (Общий), вы увидите именно порядковый номер, а не дни.

Чтобы избежать путаницы:

  • 📅 Всегда проверяйте формат ячеек с датами. Они должны иметь тип Дата (короткий или длинный формат), а не Текст или Общий.
  • ⚙️ Для ячейки с результатом вычитания установите формат Числовой или Общий, если нужны дни, либо Дата, если требуется отобразить разницу как дату (например, для расчёта срока истечения).
  • Никогда не вводите даты вручную как текст (например, "10-01-2026"). Используйте формат 10.01.2026 или функцию ДАТА().
⚠️ Внимание: Если при вычитании дат вы получаете отрицательное число (например, -5), это означает, что первая дата позже второй. Excel корректно обрабатывает такие случаи, но в некоторых формулах (например, DATEDIF) отрицательный результат может привести к ошибке #ЧИСЛО!.

2. Способ 1: Вычитание дат для расчёта дней

Самый простой и универсальный метод — прямое вычитание. Он подходит для расчёта количества дней между двумя датами, включая выходные и праздники. Формула выглядит так:

=Конечная_дата - Начальная_дата

Пример: если в ячейке A2 указана дата начала проекта 01.06.2026, а в B2 — дата окончания 15.06.2026, формула =B2-A2 вернёт 14 дней. Важно помнить, что:

  • 📊 Результат всегда в днях, даже если разница составляет годы.
  • 🔄 Если нужно исключить выходные, используйте функцию ЧИСТРАБДНИ() (разберём её в разделе 5).
  • 📅 Високосные годы учитываются автоматически — Excel корректно рассчитает разницу, например, между 28.02.2023 и 01.03.2026.

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

  • 📅 Месяцы: =РАЗНДАТ(A2;B2;"m") (подробнее в разделе 4).
  • 📆 Годы: =РАЗНДАТ(A2;B2;"y") или =ЦЕЛОЕ((B2-A2)/365) (но второй способ неточен из-за високосных лет!).

Ячейки с датами имеют формат "Дата"|Результат вычитания отображается в числовом формате|Нет текста в ячейках (например, "с 10.01")|Учтён порядок дат (начальная ≤ конечная)-->

3. Способ 2: Функция DATEDIF — скрытый инструмент Excel

Функция DATEDIF (или РАЗНДАТ в русской версии) — это уникальный инструмент, отсутствующий в списке мастер-функций, но доступный для ручного ввода. Она позволяет рассчитать разницу между датами не только в днях, но и в месяцах или годах, с учётом календарных нюансов. Синтаксис:

=DATEDIF(начальная_дата; конечная_дата; "единица_измерения")

Аргумент "единица_измерения" определяет, что возвращать:

КодОписаниеПример результата
"d"Количество дней=DATEDIF("01.01.2026";"15.01.2026";"d") → 14
"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") → 14 (1 год 2 месяца → 2)
"md"Дни без учёта месяцев и лет=DATEDIF("01.01.2026";"15.01.2026";"md") → 14

Главное преимущество DATEDIFучёт неполных периодов. Например, разница между 31.01.2026 и 28.02.2026 в месяцах будет 0 (так как 28.02 не является полным месяцем после 31.01), тогда как простое вычитание дней даст 28.

⚠️ Критическая особенность: если начальная дата > конечной, функция вернёт ошибку #ЧИСЛО!. Чтобы избежать этого, используйте ЕСЛИОШИБКА:

=ЕСЛИОШИБКА(DATEDIF(A2;B2;"d"); "Дата окончания раньше начала")
Почему DATEDIF отсутствует в списке функций?

Функция DATEDIF была добавлена в Excel для совместимости с Lotus 1-2-3 — популярной программой 1980-х. Microsoft скрыла её из интерфейса, но оставила поддержку для обратной совместимости. Несмотря на это, функция полностью работоспособна и рекомендована для сложных расчётов с датами.

4. Способ 3: Функция ДАТАРАЗН (YEARFRAC) для точных лет

Когда требуется рассчитать разницу между датами в долях года (например, для финансовых расчётов или амортизации), используйте функцию ДАТАРАЗН (или YEARFRAC в английской версии). Она возвращает дробное число, представляющее часть года между двумя датами. Синтаксис:

=ДАТАРАЗН(начальная_дата; конечная_дата; [базис])

Аргумент [базис] определяет метод расчёта (по умолчанию = 0):

  • 📅 0 или опущен — US (NASD) 30/360: каждый месяц = 30 дней, год = 360 дней.
  • 📊 1Фактический/фактический: точный расчёт с учётом високосных лет.
  • 📆 2Фактический/360.
  • 🔢 3Фактический/365.
  • 📈 4Европейский 30/360.

Пример: чтобы посчитать, какую часть года составляет период с 01.01.2026 по 30.06.2026, используйте:

=ДАТАРАЗН("01.01.2026";"30.06.2026";1)

Результат — ~0.493 (49.3% года).

⚠️ Внимание: Функция ДАТАРАЗН может давать незначительные расхождения с ручными расчётами из-за разных методов округления. Например, при базисе 0 разница между 31.01.2026 и 28.02.2026 составит 0.0833 (1 месяц = 30 дней), тогда как фактическая разница — 28 дней (~0.0767 года).

5. Способ 4: Расчёт рабочих дней (исключая выходные)

Для бизнес-задач часто требуется посчитать только рабочие дни, исключая субботы, воскресенья и праздники. В Excel для этого есть две функции:

  • 📅 ЧИСТРАБДНИ (англ. NETWORKDAYS) — считает рабочие дни между датами.
  • 📊 ЧИСТРАБДНИ.МЕЖД (англ. NETWORKDAYS.INTL) — позволяет настраивать выходные (например, пятница-суббота для некоторых стран).

Синтаксис ЧИСТРАБДНИ:

=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])

Аргумент [праздники] — это диапазон ячеек с датами праздников (необязательный).

Пример: расчёт рабочих дней между 01.06.2026 и 15.06.2026 с учётом праздников 12 июня:

=ЧИСТРАБДНИ("01.06.2026";"15.06.2026";D2:D3)

где D2:D3 содержит даты 12.06.2026 (День России) и 13.06.2026 (перенос выходного).

Для нестандартных выходных (например, пятница-суббота) используйте ЧИСТРАБДНИ.МЕЖД:

=ЧИСТРАБДНИ.МЕЖД("01.06.2026";"15.06.2026";11;D2:D3)

где 11 — код для выходных в пятницу и субботу (см. таблицу кодов в справке Excel).

⚠️ Внимание: Функции ЧИСТРАБДНИ и ЧИСТРАБДНИ.МЕЖД не учитывают региональные праздники автоматически. Вам нужно вручную указать все нерабочие дни в третьем аргументе. Для России это, например, 1–8 января, 23 февраля, 8 марта и т. д.

6. Способ 5: Расчёт разницы с учётом времени (часы, минуты)

Если ваши данные включают не только даты, но и время (например, 10.06.2026 14:30), простое вычитание вернёт дробное число, где целая часть — дни, а дробная — время. Чтобы разделить дни и часы/минуты, используйте:

  • 🕒 Дни: =ЦЕЛОЕ(B2-A2)
  • ⏱️ Часы: =ЧАС(B2-A2)*24 или =ОСТАТ(B2-A2;1)*24
  • ⏲️ Минуты: =МИНУТЫ(B2-A2)*1440

Пример: разница между 10.06.2026 08:00 и 11.06.2026 10:30:

=B2-A2

вернёт 1.104167 (1 день и ~2.5 часа). Чтобы вывести это в удобном виде:

=ЦЕЛОЕ(B2-A2) & " дн. " & ТЕКСТ(ОСТАТ(B2-A2;1)*24;"0") & " ч."

Результат: "1 дн. 2 ч.".

Для точного расчёта минут или секунд используйте функцию ВРЕМЗНАЧ или умножайте дробную часть на 1440 (минуты в дне) или 86400 (секунды в дне).

7. Типичные ошибки и как их избежать

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

1. Ошибка #ЗНАЧ! при вычитании дат

  • 🔍 Причина: Одна или обе ячейки имеют текстовый формат (например, дата введена как "01-06-2026").
  • Решение: Преобразуйте текст в дату с помощью ДАТАЗНАЧ или измените формат ячейки на Дата.

2. Неправильный расчёт месяцев/лет в DATEDIF

  • 🔍 Причина: Функция учитывает полные месяцы/годы. Например, разница между 31.01.2026 и 28.02.2026 в месяцах = 0.
  • Решение: Используйте комбинацию "y", "ym" и "md" для детализации.

3. Отрицательное значение разницы

  • 🔍 Причина: Начальная дата позже конечной.
  • Решение: Поменяйте местами даты или используйте АБС() для получения модуля: =АБС(B2-A2).

4. Не учитываются праздники в ЧИСТРАБДНИ

  • 🔍 Причина: Праздники не указаны в третьем аргументе.
  • Решение: Создайте отдельный столбец с датами праздников и укажите его диапазон.

5. Округление в ДАТАРАЗН

  • 🔍 Причина: Разные базисы дают разные результаты (например, 0 vs 1).
  • Решение: Всегда проверяйте базис и сравнивайте с ручными расчётами.

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

Как посчитать количество полных недель между датами?

Используйте формулу: =ЦЕЛОЕ((B2-A2)/7), где A2 и B2 — начальная и конечная даты. Если нужно учесть остаток дней, добавьте =ОСТАТ(B2-A2;7) для неполных недель.

Почему функция DATEDIF возвращает #ИМЯ?

Ошибка #ИМЯ! означает, что Excel не распознаёт имя функции. Убедитесь, что вы ввели её правильно: =DATEDIF (английская версия) или =РАЗНДАТ (русская версия). Также проверьте регистр — функция чувствительна к опечаткам.

Как посчитать возраст человека в годах, месяцах и днях?

Используйте комбинацию трёх функций DATEDIF:

=DATEDIF(A2;TODAY();"y") & " лет, " & DATEDIF(A2;TODAY();"ym") & " мес., " & DATEDIF(A2;TODAY();"md") & " дн."

где A2 — дата рождения, а TODAY() — текущая дата.

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

Прямой функции для кварталов нет, но можно использовать формулу:

=ЦЕЛОЕ((ГОД(B2)-ГОД(A2))*4 + МЕСЯЦ(B2)/3 - МЕСЯЦ(A2)/3)

где A2 и B2 — начальная и конечная даты. Результат округлите до целого.

Как исключить из расчёта конкретные дни недели (например, среды)?

Для этого потребуется комбинация функций ЧИСТРАБДНИ.МЕЖД и ЕСЛИ. Сначала посчитайте все рабочие дни, затем вычтите дни, которые попадают на среду:

=ЧИСТРАБДНИ.МЕЖД(A2;B2;1) - СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(НЕПРЯМ($A$1:ИНДЕКС($A:$A;B2-A2)));2)=3))

где 3 — код среды (1=воскресенье, 2=понедельник, ..., 7=суббота).