Почему определение месяца в Excel — ключевая задача для анализа данных
Работа с датами в Microsoft Excel и Google Таблицах — одна из самых востребованных операций при обработке временных рядов, финансовых отчётов или календарных планов. Определение месяца из даты может показаться тривиальной задачей, но на практике она таит множество нюансов: от простого извлечения номера месяца до преобразования его в текстовый формат или использования в условном форматировании.
Например, бухгалтеру нужно сгруппировать расходы по месяцам, маркетологу — проанализировать сезонные продажи, а HR-специалисту — построить график отпусков сотрудников. В каждом случае требуется свой подход: где-то достаточно функции МЕСЯЦ(), а где-то потребуется комбинация ТЕКСТ() с пользовательским форматом. Эта статья охватывает все актуальные методы — от базовых до продвинутых, включая обработку ошибок и автоматизацию через Power Query.
Важно понимать, что Excel хранит даты как последовательные числа (начиная с 1 января 1900 года), где целая часть отвечает за день, а дробная — за время. Этот факт объясняет, почему некоторые функции работают неочевидным образом. Мы разберём, как избежать типичных ошибок, например, когда МЕСЯЦ("31.12.2023") возвращает 12, а не "декабрь", и как правильно обрабатывать пустые ячейки в массивах данных.
Способ 1: Функция МЕСЯЦ() — базовый метод для номера месяца
Самый простой способ получить номер месяца из даты — использовать встроенную функцию МЕСЯЦ(). Она возвращает целое число от 1 (январь) до 12 (декабрь). Синтаксис минималистичен:
=МЕСЯЦ(дата)
Где дата может быть:
- 📅 Ссылкой на ячейку с датой (например,
=МЕСЯЦ(A2)) - 📊 Датой в формате текста, заключённого в кавычки (например,
=МЕСЯЦ("15.05.2026")) - 🔢 Результатом другой функции, возвращающей дату (например,
=МЕСЯЦ(СЕГОДНЯ()))
Пример использования для анализа продаж:
| Дата продажи | Сумма, ₽ | Месяц (число) |
|---|---|---|
| 12.01.2026 | 15 000 | =МЕСЯЦ(A2) |
| 03.02.2026 | 8 500 | 2 |
| 18.03.2026 | 22 300 | 3 |
⚠️ Внимание: ФункцияМЕСЯЦ()игнорирует дробную часть даты (время). Если в ячейке содержится15.05.2026 14:30, результат всё равно будет 5.
Для массовой обработки данных растяните формулу на весь столбец. Если в ячейке вместо даты текст (например, "Май 2026"), Excel вернёт ошибку #ЗНАЧ!. Чтобы избежать этого, предварительно преобразуйте текст в дату функцией ДАТАЗНАЧ():
=МЕСЯЦ(ДАТАЗНАЧ("15-Май-2026"))
Способ 2: Функция ТЕКСТ() — преобразование месяца в название
Когда требуется не номер, а полное или сокращённое название месяца (например, "январь" или "янв"), на помощь приходит функция ТЕКСТ(). Её ключевое преимущество — гибкость форматирования через коды форматов.
Базовый синтаксис:
=ТЕКСТ(дата; "формат")
Популярные форматы для месяцев:
- 📅
"мммм"— полное название (например, "декабрь") - 📅
"ммм"— сокращённое название (например, "дек") - 📅
"м"или"мм"— номер месяца без нуля или с нулём (1 или 01)
Примеры:
=ТЕКСТ(A2; "мммм") → "май"
=ТЕКСТ("15.05.2026"; "ммм") → "май"
=ТЕКСТ(СЕГОДНЯ(); "м") → "5" (если сегодня май)
⚠️ Внимание: Название месяца в функцииТЕКСТ()зависит от языковых настроек Excel. Если у вас английская версия, результат будет "May" вместо "май". Чтобы исправить это, измените региональные параметры вФайл → Параметры → Язык.
Для создания динамических отчётов комбинируйте ТЕКСТ() с другими функциями. Например, чтобы вывести "Отчёт за май 2026", используйте:
="Отчёт за " & ТЕКСТ(СЕГОДНЯ(); "мммм yyyy")
Как изменить язык названий месяцев без смены версии Excel?
Если вам нужно вывести название месяца на другом языке (например, "May" вместо "май"), используйте функцию BAHTTEXT() с обходным путём или создайте пользовательскую функцию на VBA. Альтернатива — добавить столбец с переводом и использовать ВПР() для подстановки.
Способ 3: Пользовательский формат ячеек — визуальное решение
Если вам не нужно использовать номер или название месяца в расчётах, а требуется лишь отобразить дату в удобном виде, оптимальный выбор — пользовательский формат ячеек. Этот метод не изменяет исходное значение, а только его внешнее представление.
Чтобы применить формат:
- Выделите ячейки с датами.
- Нажмите
Ctrl+1(или правая кнопка →Формат ячеек). - Вкладка
Число → (все форматы). - В поле
Типвведите один из кодов:
| Код формата | Пример отображения | Описание |
|---|---|---|
мммм yyyy | май 2026 | Полное название + год |
ммм yy | май 24 | Сокращённое название + короткий год |
мм/yyyy | 05/2026 | Номер месяца с нулём + год |
[$-419]мммм yyyy | май 2026 | Принудительный русский формат (419 — код локали) |
Преимущество этого метода — сохранение исходной даты для дальнейших вычислений. Например, если ячейка отформатирована как "мммм", но содержит 15.05.2026, формула =ГОД(A2) всё равно вернёт 2026.
⚠️ Внимание: Пользовательский формат не работает с текстом. Если в ячейке записано "15 мая", а не дата, формат не изменится. В таких случаях сначала преобразуйте текст в дату функцией ДАТАЗНАЧ().
Способ 4: Функции ДАТА(), ГОД(), ДЕНЬ() — для сложных расчётов
Когда требуется не просто извлечь месяц, а провести анализ на его основе (например, рассчитать количество дней в месяце или определить квартал), пригодятся комбинации функций ДАТА(), ГОД() и ДЕНЬ().
Примеры практического применения:
- 📊 Последний день месяца (для расчёта дедлайнов):
=ДАТА(ГОД(A2); МЕСЯЦ(A2)+1; 0)
=ОКРВВЕРХ(МЕСЯЦ(A2)/3; 0)
=ДЕНЬ(ДАТА(ГОД(A2); МЕСЯЦ(A2)+1; 0))
Разберём формулу для последнего дня месяца подробнее. Логика следующая:
ГОД(A2)— извлекает год из даты.МЕСЯЦ(A2)+1— берёт следующий месяц.0в аргументе "день" означает "последний день предыдущего месяца".
Это решение универсально: оно корректно работает даже для февраля в високосные годы.
Ячейка содержит реальную дату (не текст)|
Формула учитывает високосные годы для февраля|
Результаты проверены на крайних значениях (1 января, 31 декабря)|
Используются абсолютные ссылки ($A$2) при копировании формул
-->
Способ 5: Условное форматирование по месяцам
Визуализация данных по месяцам — мощный инструмент для быстрого анализа. Например, можно выделить цветом все даты, относящиеся к текущему месяцу, или пометить просроченные задачи. Для этого используйте условное форматирование с формулами.
Алгоритм настройки:
- Выделите диапазон с датами.
- Перейдите на вкладку
Главная → Условное форматирование → Создать правило. - Выберите
Использовать формулу для определения форматируемых ячеек. - Введите формулу (примеры ниже).
Популярные правила:
- 🟢 Текущий месяц (зелёная заливка):
=И(МЕСЯЦ(A2)=МЕСЯЦ(СЕГОДНЯ()); ГОД(A2)=ГОД(СЕГОДНЯ()))
=И(МЕСЯЦ(A2)=МЕСЯЦ(СЕГОДНЯ())-1; ГОД(A2)=ГОД(СЕГОДНЯ()))
=A2<СЕГОДНЯ()-30
Для динамического управления цветами используйте Управление правилами, где можно задать приоритеты (например, "просроченные" задачи будут красными, даже если они относятся к текущему месяцу).
⚠️ Внимание: Условное форматирование по месяцам может замедлить работу книги, если применяется к большому диапазону (более 10 000 ячеек). В таких случаях используйте сводные таблицы или Power Query для предварительной группировки данных.
Способ 6: Power Query — обработка больших массивов данных
Если вам нужно извлечь месяцы из тысяч строк (например, в выгрузке банковских транзакций), ручные формулы станут тормозом. Здесь на помощь приходит Power Query — инструмент ETL (Extract, Transform, Load), встроенный в Excel 2016 и новее.
Пошаговая инструкция:
- Выделите таблицу с датами и нажмите
Данные → Из таблицы/диапазона(илиДанные → Получить данные → Из таблицы). - В редакторе Power Query выделите столбец с датами.
- Перейдите на вкладку
Добавить столбец → Дата → Месяц → Название месяца(илиНомер месяца). - При необходимости измените тип данных нового столбца на
ТекстилиЦелое число. - Нажмите
Закрыть и загрузить.
Преимущества Power Query:
- 🚀 Производительность: обрабатывает миллионы строк без замедления.
- 🔄 Воспроизводимость: запрос сохраняется и обновляется при изменении исходных данных.
- 🛠 Гибкость: можно добавить дополнительные преобразования (например, заменить "май" на "05").
Пример кода на языке M (для ручного редактирования запроса):
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
ИзмененныйТип = Table.TransformColumnTypes(Источник,{{"Дата", type date}}),
ДобавленМесяц = Table.AddColumn(ИзмененныйТип, "Месяц", each Date.Month([Дата]), Int64.Type)
in
ДобавленМесяц
⚠️ Внимание: При импорте данных из внешних источников (CSV, SQL) убедитесь, что столбец с датами распознан корректно. Power Query может интерпретировать "01.02.2026" как 1 февраля (русский формат) или 2 января (американский формат). Проверяйте это в Просмотр данных.
Способ 7: Макросы VBA — автоматизация для продвинутых пользователей
Когда стандартных функций недостаточно (например, нужно извлечь месяц из нестандартного текстового формата или обработать сотни файлов), на помощь приходят макросы на VBA. Ниже приведён пример кода для создания пользовательской функции, которая возвращает название месяца на русском языке независимо от настроек Excel.
Как добавить макрос:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте новый модуль:
Вставка → Модуль. - Скопируйте код ниже.
- Закройте редактор и используйте функцию в Excel как обычную (например,
=РусскийМесяц(A2)).
Function РусскийМесяц(Дата As Variant) As String
Dim Месяца(1 To 12) As String
Dim НомерМесяца As Integer
' Массив названий месяцев на русском
Месяца(1) = "январь": Месяца(2) = "февраль": Месяца(3) = "март"
Месяца(4) = "апрель": Месяца(5) = "май": Месяца(6) = "июнь"
Месяца(7) = "июль": Месяца(8) = "август": Месяца(9) = "сентябрь"
Месяца(10) = "октябрь": Месяца(11) = "ноябрь": Месяца(12) = "декабрь"
' Проверка на ошибки
If Not IsDate(Дата) Then
РусскийМесяц = "Ошибка: не дата"
Exit Function
End If
НомерМесяца = Month(Дата)
РусскийМесяц = Месяца(НомерМесяца)
End Function
Этот макрос решает две ключевые проблемы:
- Гарантирует вывод месяца на русском языке вне зависимости от региональных настроек.
- Обрабатывает ошибки (например, если в ячейке текст вместо даты).
Для обработки диапазона ячеек используйте цикл For Each:
Sub ВыделитьТекущийМесяц()
Dim Ячейка As Range
For Each Ячейка In Selection
If Month(Ячейка.Value) = Month(Date) And Year(Ячейка.Value) = Year(Date) Then
Ячейка.Interior.Color = RGB(200, 230, 200) ' Светло-зелёный
End If
Next Ячейка
End Sub
⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm (с поддержкой макросов). При открытии такого файла Excel может показать предупреждение о безопасности — разрешите выполнение макросов, только если доверяете источнику.
Частые ошибки и их решения
Даже опытные пользователи сталкиваются с проблемами при работе с месяцами в Excel. Рассмотрим типичные ошибки и способы их устранения.
| Ошибка | Причина | Решение |
|---|---|---|
#ЗНАЧ! в функции МЕСЯЦ() | Ячейка содержит текст, а не дату | Используйте ДАТАЗНАЧ() или преобразуйте формат ячейки в Дата |
| Неправильное название месяца (например, "May" вместо "май") | Английские региональные настройки | Измените формат ячейки на русский или используйте VBA |
Функция ТЕКСТ() возвращает #ИМЯ? | Опечатка в коде формата (например, "ммммм" вместо "мммм") | Проверьте синтаксис кода формата |
| Условное форматирование не применяется | Неверная ссылка на ячейку в формуле | Используйте относительные ссылки (например, A2, а не $A$2) |
| Power Query не распознаёт даты | Неправильный разделитель (точка vs косая черта) | Преобразуйте столбец в дату через Параметры столбца → Дата |
Особое внимание уделите формату данных при импорте. Например, если вы загружаете данные из CSV, где даты записаны как "01/05/2026", Excel может интерпретировать их как 1 мая или 5 января в зависимости от региональных настроек. Чтобы избежать путаницы, используйте универсальный формат ГГГГ-ММ-ДД (ISO 8601).
Ещё одна распространённая проблема — пустые ячейки. Если в диапазоне есть пустые значения, функции вроде =МЕСЯЦ(A2) вернут ошибку. Решение — обернуть формулу в ЕСЛИОШИБКА():
=ЕСЛИОШИБКА(МЕСЯЦ(A2); "")
FAQ: Ответы на популярные вопросы
Как извлечь месяц из даты в формате "15-Май-2026"?
Используйте комбинацию функций ДАТАЗНАЧ() и МЕСЯЦ():
=МЕСЯЦ(ДАТАЗНАЧ("15-" & ЛЕВСИМВ(A2;3) & "-2026"))
Для автоматизации с разными годами замените "2026" на ПРАВСИМВ(A2;4).
Можно ли получить месяц из timestamp (например, 1683756000)?
Да, но сначала преобразуйте timestamp в дату. В Excel timestamp — это количество секунд с 1 января 1970 года. Формула:
=МЕСЯЦ(ДАТА(1970;1;1) + (A2/86400))
Где 86400 — количество секунд в дне.
Как посчитать количество уникальных месяцев в диапазоне?
Используйте функцию ЧАСТОТА() в формуле массива:
=СЧЁТЕСЛИ(ЧАСТОТА(МЕСЯЦ(A2:A100); МЕСЯЦ(A2:A100)); ">0")
Для Excel 365 подойдёт более простая версия:
=СЧЁТЕСЛИ(УНИК(МЕСЯЦ(A2:A100)); ">0")
Почему функция ТЕКСТ() возвращает английские месяца, хотя в Excel русский язык?
Это происходит из-за настроек локали в форматах дат. Решения:
- Измените региональные параметры в
Файл → Параметры → Язык → Региональные параметры. - Используйте VBA (см. пример макроса
РусскийМесяцвыше). - Добавьте код локали в формат:
=ТЕКСТ(A2; "[$-419]мммм"), где419— ID русского языка.
Как создать выпадающий список с месяцами?
Вариант 1: Ручной ввод. Перейдите в Данные → Проверка данных → Список и введите:
январь,февраль,март,апрель,май,июнь,июль,август,сентябрь,октябрь,ноябрь,декабрь
Вариант 2: Динамический список на основе дат. Создайте именованный диапазон:
- Введите в столбец месяцы (например,
=ТЕКСТ(ДАТА(2026;СТРОКА(A1:A12);1);"мммм")). - Выделите диапазон и присвойте ему имя (например,
Месяца) черезФормулы → Диспетчер имён. - В проверке данных укажите
=Месяца.