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

Почему стандартный подход не всегда работает

Вы когда-нибудь пытались вручную посчитать дни в феврале 2026 года, а потом обнаруживали, что ваш календарь не совпадает с Excel? Или может быть, вам нужно было автоматизировать расчёт зарплаты за месяц, но формула упорно выдавала 30 дней вместо 31? Эти проблемы знакомы каждому, кто работает с датами в электронных таблицах.

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

Особенно важно понимать эту тему тем, кто работает с финансовыми отчётами, графиками смен, планированием проектов или анализом временных рядов. Ошибка всего в один день может привести к искажению всей аналитики!

Способ 1: Использование функции ДАТАМЕС (EOMONTH)

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

=ДЕНЬ(ДАТАМЕС(дата;0))

Где дата — это любая дата внутри интересующего вас месяца. Например, для февраля 2026 года:

=ДЕНЬ(ДАТАМЕС("1.02.2026";0))  → вернёт 29
  • ✅ Работает для любого месяца, включая високосные годы
  • ✅ Автоматически учитывает формат даты вашей системы
  • ⚠️ Требует Excel 2007 или новее (в старых версиях функции нет)

Способ 2: Арифметика с функцией ДАТА (DATE)

Если функция ДАТАМЕС по какой-то причине недоступна, можно обойтись стандартной функцией ДАТА. Логика проста: найдём разницу между первым днём следующего месяца и первым днём текущего. Формула:

=ДАТА(ГОД(дата);МЕСЯЦ(дата)+1;1)-ДАТА(ГОД(дата);МЕСЯЦ(дата);1)

Для марта 2026 года это будет:

=ДАТА(2026;4;1)-ДАТА(2026;3;1)  → вернёт 31
⚠️ Внимание: Если указать декабрь, формула вернёт количество дней в январе следующего года. Чтобы избежать ошибки, добавьте проверку: =ЕСЛИ(МЕСЯЦ(дата)=12;31;ДАТА(...))
МесяцФормула с ДАТАМЕСФормула с ДАТАРезультат
Январь 2026=ДЕНЬ(ДАТАМЕС("1.01.2026";0))=ДАТА(2026;2;1)-ДАТА(2026;1;1)31
Февраль 2026=ДЕНЬ(ДАТАМЕС("1.02.2026";0))=ДАТА(2026;3;1)-ДАТА(2026;2;1)29
Апрель 2023=ДЕНЬ(ДАТАМЕС("1.04.2023";0))=ДАТА(2023;5;1)-ДАТА(2023;4;1)30
📊 Какой способ вам кажется самым удобным?
Функция ДАТАМЕС
Арифметика с ДАТА
Другие методы (см. ниже)
Ещё не решил

Способ 3: Массив с количеством дней (для старых версий Excel)

Если вы работаете в Excel 2003 или более ранней версии, где нет ДАТАМЕС, можно создать справочный массив с количеством дней в каждом месяце и добавить проверку на високосный год. Формула получится громоздкой, но надёжной:

=ЕСЛИ(

И(МЕСЯЦ(дата)=2;ОСТАТ(GОД(дата);4)=0);

29;

ВЫБОР(

МЕСЯЦ(дата);

31;28;31;30;31;30;31;31;30;31;30;31

)

)

Этот метод требует ручного ввода всех значений, но зато работает даже в самых старых версиях Excel без дополнительных надстроек. Главный недостаток — не учитывает столетия, не кратные 400 (например, 2100 год не будет високосным).

Почему 2100 год не високосный?

По григорианскому календарю год является високосным, если он кратен 4, но не кратен 100, либо кратен 400. Поэтому 2100, 2200 и 2300 годы не будут високосными, несмотря на делимость на 4.

Способ 4: Power Query для массовой обработки

Если вам нужно посчитать дни в месяце для тысяч строк (например, в финансовом отчёте за несколько лет), ручной ввод формул станет кошмаром. Здесь на помощь придёт Power Query — инструмент для преобразования данных. Алгоритм действий:

  1. Выделите столбец с датами → Данные → Из таблицы/диапазона
  2. В редакторе Power Query добавьте пользовательский столбец со формулой:
    = Date.DaysInMonth([ВашСтолбецСДатой])
  3. Нажмите Закрыть и загрузить

Преимущество этого метода — автоматическое обновление при изменении исходных данных. А ещё Power Query корректно обрабатывает все нюансы календаря, включая столетия.

Данные в одном столбце|Формат ячеек — "Дата"|Нет пустых строк|Сохранён резервный файл-->

Способ 5: VBA-макрос для автоматизации

Для тех, кто не боится программирования, VBA предлагает максимальную гибкость. Создайте простую функцию:

Function DaysInMonth(d As Date) As Integer

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

End Function

Теперь в любой ячейке можно использовать =DaysInMonth(A1), где A1 содержит дату. Этот метод:

  • 🚀 Работает в любой версии Excel (включая Mac)
  • 🔄 Автоматически обновляется при изменении исходных данных
  • ⚙️ Можно модифицировать под специфические задачи (например, учитывать рабочие дни)
⚠️ Внимание: Макросы могут быть отключены по умолчанию в целях безопасности. Чтобы их использовать, перейдите в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов и выберите "Включить все макросы".

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

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

  1. Неправильный формат ячейки: Excel может воспринимать "01.02.2026" как текст, если ячейка отформатирована как "Общий". Всегда проверяйте формат через Главная → Формат → Формат ячеек → Дата.
  2. Игнорирование високосных лет: Формулы вроде =31 для января сработают, но =28 для февраля — нет. Всегда используйте динамические расчёты.
  3. Ошибки в ссылках: В формуле =ДЕНЬ(ДАТАМЕС(B2;0)) убедитесь, что B2 содержит именно дату, а не текст.

Чтобы проверить корректность работы формулы, тестируйте её на крайних случаях:

  • 📅 Февраль 2020 (високосный год — 29 дней)
  • 📅 Февраль 2021 (невисокосный — 28 дней)
  • 📅 Декабрь 2023 (переход на новый год)

Практическое применение: где это используется

Знание количества дней в месяце пригодится в самых неожиданных сценариях:

ОбластьПример использованияФормула
ФинансыРасчёт процентов по кредиту за месяц=СУММПРОИЗВ(ставка;ДЕНЬ(ДАТАМЕС(A1;0)))
ЛогистикаПланирование графиков доставки=РАБДЕНЬ(ДАТАНАЧ(год;месяц;1);ДЕНЬ(ДАТАМЕС(...)))
HRРасчёт отработанных дней сотрудниками=ДЕНЬ(ДАТАМЕС(дата_приёма;месяцев))
ПроизводствоНормирование выработки по дням=округлить(план/ДЕНЬ(ДАТАМЕС(...));0)

Вот реальный кейс из практики: компания занималась анализом продаж по месяцам, но данные за февраль всегда занижались на 3%. Оказалось, что в формуле расчёта среднедневного чека было жёстко прописано 28 дней вместо динамического подсчёта. После исправления на =ДЕНЬ(ДАТАМЕС(...)) точность отчётности выросла до 100%.

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

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

Технически да, но это крайне неудобно. Например, можно вручную создать таблицу с количеством дней для каждого месяца (31, 28/29, 31, 30...) и использовать ВПР для поиска. Однако такой подход не учитывает високосные годы и требует постоянного обновления. Не рекомендуем этот метод для серьёзных задач.

Почему моя формула возвращает ошибку #ИМЯ?

Скорее всего, вы используете русскоязычную версию Excel, но вводите функции на английском (например, EOMONTH вместо ДАТАМЕС). Либо наоборот — в английской версии пишете ДЕНЬ вместо DAY. Проверьте язык интерфейса в Файл → Параметры → Язык.

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

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

=ЧИСТРАБДНИ(

ДАТА(год;месяц;1);

ДАТАМЕС(ДАТА(год;месяц;1);0);

[праздники]

)

Где [праздники] — диапазон с датами выходных дней (например, A1:A10).

Можно ли использовать эту формулу в Google Sheets?

Да, но с поправками:

  • Вместо ДАТАМЕС используйте EOMONTH (работает и в русскоязычной версии)
  • Функция ДЕНЬ называется DAY
  • Для массива дней в месяце используйте ARRAYFORMULA

Пример: =DAY(EOMONTH(A1;0))

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

Если у вас столбец с датами (например, A2:A100), и нужно для каждой посчитать дни в её месяце, используйте проливаемую формулу:

=КАРТА(A2:A100;ЛЯМБДА(x;ДЕНЬ(ДАТАМЕС(x;0))))

В английской версии: =MAP(A2:A100;LAMBDA(x;DAY(EOMONTH(x;0)))). Эта формула автоматически применится ко всем ячейкам диапазона.