Как посчитать количество дней в месяце в Excel: формулы для любых задач

Работа с датами в Microsoft Excel часто требует нестандартных решений — особенно когда нужно определить количество дней в конкретном месяце. На первый взгляд задача кажется простой: в феврале 28 (или 29) дней, в апреле — 30, а в августе — 31. Но как автоматизировать этот расчёт для сотен строк данных? Или учесть високосные годы без ручного контроля? А что если месяц указан не числом, а названием (например, "январь")?

В этой статье вы найдёте 5 рабочих формул для любых сценариев: от базового подсчёта дней в фиксированном месяце до динамических расчётов с учётом года. Мы разберём типичные ошибки (вроде #ЧИСЛО! при неверном формате даты), покажем, как обойти ограничения функций ДЕНЬ() и КОНМЕСЯЦА(), и даже научимся извлекать количество дней из текстового названия месяца. Все примеры протестированы в Excel 2019–2023 и Excel Online.

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

1. Базовая формула: ДЕНЬ(КОНМЕСЯЦА) для фиксированного месяца

Самый простой способ — использовать комбинацию функций ДЕНЬ() и КОНМЕСЯЦА(). Эта пара возвращает последний день месяца, а функция ДЕНЬ() извлекает из него номер дня (то есть количество дней в месяце).

Синтаксис:

=ДЕНЬ(КОНМЕСЯЦА(дату_или_месяц;0))

Примеры:

  • 📅 Для текущего месяца: =ДЕНЬ(КОНМЕСЯЦА(СЕГОДНЯ();0)) → вернёт 31 (если сегодня июль) или 28/29 (если февраль).
  • 🔢 Для конкретного месяца (например, мая 2026): =ДЕНЬ(КОНМЕСЯЦА(ДАТА(2026;5;1);0)) → результат 31.
  • 📊 Для динамической даты в ячейке A1: =ДЕНЬ(КОНМЕСЯЦА(A1;0)).

⚠️ Внимание: Если в ячейке A1 указано только название месяца (например, "март") без года, формула вернёт ошибку #ЗНАЧ!. Для текстового формата нужен другой подход — см. раздел 4.

📊 Какой формат дат вы чаще используете в Excel?
Числовой (01.01.2026)
Текстовый (январь 2026)
Серийный номер (45678)
Не работаю с датами

2. Учёт високосных лет: формула с ДАТА()

Функция КОНМЕСЯЦА() автоматически учитывает високосные годы, но если вам нужно явно указать год (например, для исторических данных), используйте конструкцию с ДАТА():

=ДЕНЬ(ДАТА(год;месяц+1;1)-1)

Как это работает:

  1. Функция ДАТА(год;месяц+1;1) создаёт дату первого дня следующего месяца.
  2. Вычитаем 1 день, чтобы получить последний день текущего месяца.
  3. ДЕНЬ() извлекает номер дня из этой даты.

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

=ДЕНЬ(ДАТА(2026;3;1)-1)  → вернёт 29

Преимущества метода:

  • 🔄 Работает для любого года, включая до 1900-го (в отличие от КОНМЕСЯЦА, которая может давать сбои).
  • 📈 Позволяет массово рассчитывать дни для списка месяцев в столбце.
=ЕСЛИ(ИЛИ(ОСТАТ(год;400)=0; И(ОСТАТ(год;4)=0; ОСТАТ(год;100)<>0)); "Високосный"; "Не високосный")
-->

3. Динамический расчёт для диапазона дат

Допустим, у вас есть столбец с датами (например, A2:A100), и нужно для каждой из них определить количество дней в соответствующем месяце. Вместо ручного ввода используйте протягиваемую формулу:

=ДЕНЬ(КОНМЕСЯЦА(A2;0))

Как протянуть формулу правильно:

  1. Введите формулу в ячейку B2.
  2. Наведите курсор на правый нижний угол ячейки (появится чёрный крестик).
  3. Дважды кликните по крестику — формула автоматически заполнит столбец до последней заполненной ячейки в A.

⚠️ Внимание: Если в столбце A есть пустые ячейки или текстовые значения (например, "Нет данных"), формула вернёт ошибку. Чтобы избежать этого, оберните её в ЕСЛИОШИБКА():

=ЕСЛИОШИБКА(ДЕНЬ(КОНМЕСЯЦА(A2;0)); "")

- Убедитесь, что все даты в одном формате (например, ДД.ММ.ГГГГ)

- Удалите пустые ячейки или замените их на 0

- Проверьте, нет ли текста вместо дат (например, "январь" вместо "01.01.2026")

- Примените формат "Дата" к ячейкам с исходными данными-->

4. Расчёт для текстового названия месяца

Если месяц указан словом (например, "апрель" или "июль 2023"), стандартные формулы не сработают. Здесь поможет комбинация функций ПОИСКПОЗ(), ДАТАЗНАЧ() и ЗАМЕНИТЬ().

Формула для формата "месяц год" (например, "февраль 2026"):

=ДЕНЬ(ДАТАЗНАЧ("1 " & A1) + 32 - ДЕНЬ(ДАТАЗНАЧ("1 " & A1)))

Как это работает:

  1. ДАТАЗНАЧ("1 " & A1) преобразует текст в дату (1-е число указанного месяца).
  2. Прибавляем 32 дня — получаем дату в следующем месяце.
  3. Вычитаем номер дня (1) — получаем последний день текущего месяца.
  4. ДЕНЬ() извлекает количество дней.

Для формата "только месяц" (например, "март"):

=ДЕНЬ(ДАТА(2026; ПОИСКПОЗ(A1; {"январь";"февраль";...;"декабрь"}; 0); 1) + 32 - ДЕНЬ(ДАТА(2026; ПОИСКПОЗ(A1; {"январь";"февраль";...;"декабрь"}; 0); 1)))

⚠️ Внимание: В втором случае обязательно укажите актуальный год (в примере — 2026), иначе расчёт февраля будет неверным для високосных лет.

Альтернативный способ для текста

Если месяц указан сокращённо (например, "янв", "фев"), используйте функцию ВЫБРАТЬ():

=ДЕНЬ(КОНМЕСЯЦА(ДАТА(2026; ВЫБРАТЬ(ЛЕВСИМВ(A1;3); "янв";1; "фев";2; ...; "дек";12); 1); 0))

5. Продвинутый метод: пользовательская функция VBA

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

Код функции (для вставки в редактор VBA):

Function DaysInMonth(input As Variant) As Integer

Dim d As Date

On Error Resume Next

If IsNumeric(input) Then

d = CDate(input)

Else

d = CDate("1 " & input)

End If

If Err.Number <> 0 Then

DaysInMonth = CVErr(xlErrValue)

Else

DaysInMonth = Day(DateSerial(Year(d), Month(d) + 1, 1) - 1)

End If

End Function

Как использовать:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (меню Insert → Module).
  3. Сохраните файл как .xlsm (с поддержкой макросов).
  4. Теперь в Excel можно использовать =DaysInMonth(A1), где A1 — ячейка с датой или текстом (например, "май 2023" или 44355).

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

  • 🔧 Работает с любым форматом (числа, текст, серийные номера).
  • 🚀 Единственный метод, который корректно обрабатывает неполные данные (например, "февраль" без года, используя текущий год).
  • 📁 Можно расширить функционал (например, добавить проверку на будущие даты).

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

Даже с правильными формулами можно получить неожиданные результаты. Разберём самые частые проблемы и их решения:

Ошибка Причина Решение
#ЗНАЧ! Ячейка содержит текст вместо даты (например, "январь"). Используйте формулу для текстового формата (раздел 4) или преобразуйте данные в даты через ДАТАЗНАЧ().
#ЧИСЛО! Неверный номер месяца (например, 13) или год до 1900. Проверьте исходные данные. Для годов до 1900 используйте формулу с ДАТА() (раздел 2).
Неправильное количество дней для февраля Год не указан или указан неверно (например, 1900 ошибочно считается високосным). Явно укажите год в формуле или используйте СЕГОДНЯ() для текущего года.
Формула возвращает 0 Ячейка пустая или содержит 0. Добавьте проверку ЕСЛИ(A1=""; ""; формула).

⚠️ Внимание: Функция КОНМЕСЯЦА() в Excel для Mac может вести себя иначе, чем в Windows-версии. Например, для даты "31.01.2026" формула =КОНМЕСЯЦА(A1;1) вернёт "29.02.2026" в Windows, но может выдавать ошибку на Mac. Тестируйте формулы на своей версии программы!

FAQ: Частые вопросы и готовые решения

🔹 Как посчитать дни в месяце для диапазона дат в Google Таблицах?

В Google Sheets используйте ту же формулу, что и в Excel: =ДЕНЬ(КОНМЕСЯЦА(A2;0)). Альтернатива — =ДЕНЬ(ДАТА(ГОД(A2); МЕСЯЦ(A2)+1; 1)-1).

⚠️ Обратите внимание: в Google Таблицах нет функции ДАТАЗНАЧ() — для текста используйте =ДАТА(2026; ПОИСКПОЗ(A1; {"январь";"февраль";...}); 1).

🔹 Можно ли получить количество дней в месяце без указания года?

Технически да, но результат будет неточным для февраля. Формула =ДЕНЬ(ДАТА(2026;МЕСЯЦ(СЕГОДНЯ());1)+32-ДЕНЬ(ДАТА(2026;МЕСЯЦ(СЕГОДНЯ());1))) вернёт 28 или 29 в зависимости от того, високосный ли текущий год.

Для точного расчёта год указывать обязательно!

🔹 Как выделить ячейки с количеством дней = 31?

Используйте условное форматирование:

  1. Выделите диапазон с результатами (например, B2:B100).
  2. Перейдите в Главная → Условное форматирование → Создать правило.
  3. Выберите Форматировать только ячейки, которые содержат.
  4. Установите условие: Значение = 31 и задайте цвет заливки.
🔹 Почему формула возвращает 30 для апреля, хотя там 30 дней?

Скорее всего, вы используете =ДЕНЬ(КОНМЕСЯЦА(A1;1)) вместо =ДЕНЬ(КОНМЕСЯЦА(A1;0)). Параметр 0 означает "текущий месяц", а 1 — "следующий месяц". Для апреля КОНМЕСЯЦА(дата;1) вернёт 31 мая, а ДЕНЬ() извлечёт 31, что неверно.

🔹 Как посчитать рабочие дни в месяце (исключая выходные)?

Используйте функцию ЧИСТРАБДНИ():

=ЧИСТРАБДНИ(ДАТА(год;месяц;1); КОНМЕСЯЦА(ДАТА(год;месяц;1);0))

Пример для марта 2026: =ЧИСТРАБДНИ(ДАТА(2026;3;1); КОНМЕСЯЦА(ДАТА(2026;3;1);0)) → вернёт 21 рабочий день.