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

При работе с датами в Microsoft Excel часто требуется автоматически определить количество дней в конкретном месяце — например, для расчета зарплаты, планирования проектов или анализа временных рядов. Если просто вычесть даты начала и конца месяца, результат будет неточным из-за високосных годов и разной длины месяцев. В этой статье разберем 5 проверенных способов получить корректное значение, включая универсальную формулу, которая работает даже с динамическими данными.

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

1. Универсальная формула для любого месяца

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

=ДЕНЬ(ДАТА(ГОД(A1); МЕСЯЦ(A1)+1; 1)-1)

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

  • 📅 ГОД(A1) и МЕСЯЦ(A1) извлекают год и месяц из ячейки A1 (где хранится исходная дата).
  • 🔄 МЕСЯЦ(A1)+1 переходит к первому дню следующего месяца.
  • 📉 -1 отнимает один день, возвращаясь к последнему дню текущего месяца.
  • 🔢 ДЕНЬ() извлекает номер дня из полученной даты — это и есть количество дней в месяце.

Пример: если в ячейке A1 указано 15.02.2026 (високосный год), формула вернет 29. Для 15.02.2023 результат будет 28.

2. Альтернативный метод с функцией ДАТАМЕС

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

=ДЕНЬ(ДАТАМЕС(A1; 0))

Аргументы:

  • 📅 A1 — ячейка с исходной датой.
  • 🔄 0 — смещение на 0 месяцев (текущий месяц).

Преимущество этого метода — лаконичность и читаемость. Однако ДАТАМЕС() доступна только в Excel 2007 и новее. Для старых версий используйте первый способ.

⚠️ Внимание: Если в ячейке A1 текст в формате "февраль 2026", а не дата, формула вернет ошибку. Преобразуйте текст в дату с помощью ДАТАЗНАЧ().

3. Расчет для конкретного месяца и года (без ячейки с датой)

Если у вас есть только номер месяца (например, 2 для февраля) и год (2026), используйте модифицированную формулу:

=ДЕНЬ(ДАТА(2026; 3; 1)-1)

Здесь:

  • 📆 2026 — нужный год.
  • 🔢 3 — следующий месяц (март, так как мы считаем дни февраля).
  • 📌 1 — первый день марта.

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

=ДЕНЬ(ДАТА(B1; C1+1; 1)-1)

Где B1 — год, C1 — месяц (число от 1 до 12).

📊 Какой способ вам кажется удобнее?
Универсальная формула с ДАТА()
Функция ДАТАМЕС()
Расчет по номеру месяца и года
Не знаю, нужно протестировать

4. Ошибки и как их избежать

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

Ошибка Причина Решение
#ЗНАЧ! Ячейка содержит текст вместо даты (например, "январь") Используйте ДАТАЗНАЧ() или преобразуйте текст в дату через Формат ячеек
#ЧИСЛО! Некорректный номер месяца (например, 13) Проверьте диапазон месяца (1–12) или используйте ЕСЛИОШИБКА()
Неправильное количество дней для февраля Формула не учитывает високосный год Используйте универсальную формулу из раздела 1
Результат 0 или отрицательное число Ошибка в порядке аргументов ДАТА() (день/месяц/год перепутаны) Проверьте синтаксис: ДАТА(год; месяц; день)

Частая ошибка — попытка вычесть даты напрямую, например: =ДАТА(2026;3;1) - ДАТА(2026;2;1). Этот метод вернет 29 для февраля 2026, но не сработает для месяцев с 31 днем (результат будет 28 или 30 вместо 31).

Почему прямая разность дат не работает?

При вычитании ДАТА(2026;3;1) - ДАТА(2026;2;1) Excel возвращает разницу в днях между 1 марта и 1 февраля, что всегда равно 28 или 29 (в зависимости от високосного года). Однако для апреля разница составит 31 день (1 мая - 1 апреля), но формула вернет 30, так как апрель имеет 30 дней. Этот метод подходит только для февраля!

5. Примеры для реальных задач

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

5.1. Расчет зарплаты за отработанные дни

Допустим, в ячейке A1 — дата приема на работу (10.03.2026), а в B1 — оклад (50000). Чтобы посчитать зарплату за март:

=B1/ДЕНЬ(ДАТА(ГОД(A1); МЕСЯЦ(A1)+1; 1)-1) * (ДЕНЬ(ДАТА(ГОД(A1); МЕСЯЦ(A1)+1; 1)-1) - ДЕНЬ(A1)+1)

Формула:

  1. Делит оклад на количество дней в месяце.
  2. Умножает на количество отработанных дней (с 10 марта по 31 марта).

5.2. Планирование проектов

Если проект начинается 15.11.2026 и длится 45 дней, чтобы найти дату завершения:

=A1 + 45

Но чтобы узнать, сколько дней осталось в ноябре после старта:

=ДЕНЬ(ДАТА(ГОД(A1); МЕСЯЦ(A1)+1; 1)-1) - ДЕНЬ(A1)

☑️ Проверка формул перед использованием

Выполнено: 0 / 4

6. Динамический календарь на год

Создадим таблицу, которая автоматически заполнит количество дней для каждого месяца текущего года:

Месяц Количество дней Формула
Январь 31 =ДЕНЬ(ДАТА(ГОД(СЕГОДНЯ()); 2; 1)-1)
Февраль =ДЕНЬ(ДАТА(ГОД(СЕГОДНЯ()); 3; 1)-1) =ДЕНЬ(ДАТА(ГОД(СЕГОДНЯ()); 3; 1)-1)
Март =ДЕНЬ(ДАТА(ГОД(СЕГОДНЯ()); 4; 1)-1) =ДЕНЬ(ДАТА(ГОД(СЕГОДНЯ()); 4; 1)-1)

Чтобы таблица обновлялась автоматически:

  1. В столбце Месяц перечислите месяцы или используйте =ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ()); СТРОКА(A1); 1); "ММММ") (протяните формулу вниз).
  2. В столбце Количество дней используйте формулу из примера, заменяя номер месяца на СТРОКА(A1).
⚠️ Внимание: Если вы копируете формулы в другие ячейки, ссылки на СЕГОДНЯ() не обновляются автоматически. Используйте абсолютные ссылки ($A$1) или функцию ГОД() с фиксированным значением.

7. Продвинутые техники: массивы и Power Query

Для обработки больших массивов данных (например, списка дат) можно использовать:

7.1. Формулы массива

Чтобы посчитать дни в месяце для диапазона A1:A10:

=ДЕНЬ(ДАТА(ГОД(A1:A10); МЕСЯЦ(A1:A10)+1; 1)-1)

Введите формулу как формулу массиваExcel 365 и 2019 это происходит автоматически; в старых версиях нажмите Ctrl+Shift+Enter).

7.2. Power Query

Если данные импортированы из внешнего источника:

  1. Выделите столбец с датами → ДанныеИз таблицы/диапазона.
  2. В Power Query добавьте пользовательский столбец с формулой:
= Date.Day(Date.EndOfMonth([YourDateColumn]))

Где YourDateColumn — название вашего столбца.

Часто задаваемые вопросы

Как узнать, високосный ли год в Excel?

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

=ЕСЛИ(ИЛИ(ОСТАТ(GOD(A1);400)=0; И(ОСТАТ(GOD(A1);4)=0; ОСТАТ(GOD(A1);100)<>0)); "Високосный"; "Не високосный")

Где A1 — ячейка с годом. Формула проверяет правила високосного года: делимость на 400, на 4 (но не на 100).

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

Технически да, но это неэффективно. Придется вручную перечислять все месяцы:

=ЕСЛИ(ИЛИ(МЕСЯЦ(A1)=4; МЕСЯЦ(A1)=6; МЕСЯЦ(A1)=9; МЕСЯЦ(A1)=11); 30;

ЕСЛИ(МЕСЯЦ(A1)=2; ЕСЛИ(високосный_год; 29; 28); 31))

Такой подход громоздкий и требует отдельной проверки на високосный год.

Почему моя формула возвращает 30 для июля?

Скорее всего, вы используете прямую разность дат (например, =ДАТА(2026;8;1)-ДАТА(2026;7;1)). Этот метод работает только для февраля! Для июля правильный результат — 31. Используйте универсальную формулу из раздела 1.

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

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

=ЧИСТРАБДНИ(ДАТА(ГОД(A1); МЕСЯЦ(A1); 1); ДАТА(ГОД(A1); МЕСЯЦ(A1)+1; 1)-1)

Чтобы исключить праздники, добавьте третий аргумент — диапазон с датами праздников.

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

Да, все приведенные формулы работают в Google Таблицах без изменений, за исключением:

  • 📌 Функция ДАТАМЕС() называется КОНМЕСЯЦА().
  • 📌 Разделитель аргументов — запятая (,), а не точка с запятой (;).