Мастер работы с датами и числами в Excel

Иван Корнев·13.04.2026·4 мин

Чтобы рассчитать возраст в полных годах, используйте формулу =DATEDIF(A1; TODAY(); "Y"), где A1 — ячейка с датой рождения. Для сдвига даты на нужное количество месяцев примените =EDATE(дата; месяцы), а для подсчета элементов по условию — =COUNTIF(диапазон; критерий). Эти три функции закрывают 90% задач по работе со временем и статистикой в таблицах.

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

Главное правило: Убедитесь, что ячейки с датами имеют формат «Дата», а не «Текст». Если формула возвращает ошибку #ЗНАЧ!, скорее всего, дата записана текстом (например, «10.01.2000» вместо числа).

Как точно рассчитать возраст по дате рождения

Самая частая задача — узнать полный возраст человека на текущий момент. Простое вычитание годов часто дает ошибку, если день рождения еще не наступил в текущем году.

Основной метод: функция DATEDIF

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

Формула для полных лет:

=DATEDIF(A2; TODAY(); "Y")
  • A2 — ячейка с датой рождения.
  • TODAY() — функция, возвращающая текущую дату.
  • "Y" — параметр, означающий вывод результата в годах (Years).

Формула для детального возраста (годы, месяцы, дни): Если нужно вывести текст вида «35 лет, 4 месяца»:

=DATEDIF(A2; TODAY(); "Y") & " лет, " & DATEDIF(A2; TODAY(); "YM") & " мес."

Параметр "YM" показывает разницу в месяцах, игнорируя годы.

Альтернативный метод: математический расчет

Если по каким-то причинам DATEDIF недоступна, можно использовать логику с проверкой дня рождения в текущем году:

=YEAR(TODAY()) - YEAR(A2) - IF(DATE(YEAR(TODAY()); MONTH(A2); DAY(A2)) > TODAY(); 1; 0)

Эта формула вычитает год рождения из текущего и уменьшает результат на 1, если день рождения в этом году еще не наступил.

Для финансовых расчетов, где важна точность до доли года (например, для начисления процентов), используйте функцию =YEARFRAC(A2; TODAY(); 1). Она вернет число вроде 35.45.

Управление датами: сдвиг и вычисление

Часто требуется не только узнать прошедшее время, но и рассчитать будущую дату: дату увольнения через 2 года, дату оплаты через 30 дней или дату рождения ребенка.

Добавление периодов времени

ЗадачаФормулаОписание
Добавить дни=A2 + 30Просто прибавьте число дней к дате.
Добавить месяцы=EDATE(A2; 5)Надежно добавляет месяцы, учитывая високосные годы и разную длину месяцев.
Добавить годы=DATE(YEAR(A2)+2; MONTH(A2); DAY(A2))Увеличивает год на указанное значение.
Рабочие дни=WORKDAY(A2; 10)Добавляет только рабочие дни (исключая выходные).

Пример сложного сдвига: Нужно добавить 3 года и 4 месяца к дате в ячейке A2:

=EDATE(DATE(YEAR(A2)+3; MONTH(A2); DAY(A2)); 4)

Или более компактно, переводя годы в месяцы: (3*12) + 4 = 40 месяцев:

=EDATE(A2; 40)

Вычисление даты рождения по возрасту

Если известен возраст (например, 25 лет) и нужно найти ориентировочную дату рождения от сегодняшнего дня:

=DATE(YEAR(TODAY())-25; MONTH(TODAY()); DAY(TODAY()))

Внимание: Эта формула дает дату ровно 25 лет назад от сегодня. Точная дата рождения человека может отличаться на несколько дней.

Подсчет количества элементов и условий

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

Базовые функции счета

  • =COUNT(A1:A10) — считает только ячейки с числами. Игнорирует текст и пустые клетки.
  • =COUNTA(A1:A10) — считает все непустые ячейки (текст, числа, даты, ошибки).
  • =COUNTBLANK(A1:A10) — считает только пустые ячейки.

Условный счет (COUNTIF и COUNTIFS)

Используйте эти функции, когда нужно посчитать элементы по правилу.

Пример 1: Количество сотрудников старше 30 лет Предположим, возраст указан в столбце B.

=COUNTIF(B2:B100; ">30")

Пример 2: Количество активных заказов за январь 2026 Здесь нужно два условия: дата в диапазоне и статус «Активен». Используем COUNTIFS (множественное число).

=COUNTIFS(A2:A100; ">=01.01.2026"; A2:A100; "<=31.01.2026"; C2:C100; "Активен")
  • Первое условие: дата больше или равна 1 января.
  • Второе условие: дата меньше или равна 31 января.
  • Третье условие: статус равен тексту "Активен".

Частая ошибка: В функциях COUNTIF текстовые критерии и знаки сравнения (>, <, <>) обязательно должны быть взяты в кавычки.

  • Правильно: ">100"
  • Неправильно: >100 (без кавычек формула выдаст ошибку).

Подсчет уникальных значений

В новых версиях Excel (365, 2021) проще всего использовать связку UNIQUE и COUNTA:

=COUNTA(UNIQUE(A2:A100))

Эта формула автоматически отфильтрует повторения и посчитает количество разных элементов в списке.

Частые ошибки и как их избежать

  1. Ошибка #ЗНАЧ! при работе с датами.

    • Причина: Дата импортирована как текст (часто бывает при копировании из 1С или веб-сайтов).
    • Решение: Выделите столбец, перейдите в меню «Данные» → «Текст по столбцам» → «Далее» → «Далее» → Выберите формат «Дата» (ГМД или ДМГ) → «Готово».
  2. Неверный возраст (на 1 год больше).

    • Причина: Использована формула (ГОД(СЕГОДНЯ()) - ГОД(ДАТА_РОЖД)). Она не учитывает, прошел ли день рождения в этом году.
    • Решение: Используйте DATEDIF или формулу с проверкой IF, описанную выше.
  3. Функция DATEDIF не появляется в подсказках.

    • Это нормально. Функция рабочая, просто Microsoft скрыл её из списка автозаполнения для совместимости с старыми версиями Lotus 1-2-3. Вводите название вручную.

FAQ

Как посчитать стаж работы в годах и месяцах? Используйте тот же принцип, что и с возрастом. Если дата приема в A1, а дата увольнения (или сегодня) в B1: =DATEDIF(A1; B1; "Y") & " г. " & DATEDIF(A1; B1; "YM") & " мес."

Можно ли посчитать количество слов в ячейке? Прямой функции нет, но можно использовать трюк с заменой пробелов: =LEN(A1) - LEN(ПОДСТАВИТЬ(A1; " "; "")) + 1 (Работает корректно, если между словами один пробел).

Как выделить цветом ячейки, где возраст больше 60 лет? Используйте «Условное форматирование» на вкладке «Главная». Выберите правило «Формула» и введите: =DATEDIF(A2; TODAY(); "Y") > 60.