Работа с датами в Microsoft Excel — одна из самых востребованных задач при анализе данных. Часто требуется не просто хранить даты в ячейках, а выделять из них отдельные компоненты: день, месяц или год. Особенно актуально извлечение месяца и года — например, для группировки данных по периодам, создания отчётов или построения динамических диаграмм.
Многие пользователи сталкиваются с трудностями: какие функции использовать? Как избежать ошибок при преобразовании форматов? Эта статья поможет разобраться в нюансах и выбрать оптимальный способ — от простых формул до автоматизации через Power Query и VBA. Мы рассмотрим 5 рабочих методов, каждый с примерами и пояснениями, чтобы вы могли применить их к своим данным независимо от версии Excel (2010, 2016, 2019, 365 или Excel Online).
Прежде чем переходить к практике, важно понять, как Excel хранит даты. Внутри программы любая дата — это число, где 1 соответствует 1 января 1900 года. Например, дата 15.05.2023 в формате числа будет 45046. Это знание поможет избежать ошибок при работе с функциями.
Если вы новичок, начните с базовых функций МЕСЯЦ() и ГОД(). Опытным пользователям пригодятся комбинации с ТЕКСТ() или Power Query для обработки больших массивов данных. А для полной автоматизации мы покажем, как написать простой макрос на VBA.
1. Базовый способ: функции МЕСЯЦ и ГОД
Самый простой метод — использовать встроенные функции МЕСЯЦ() и ГОД(). Они возвращают числовые значения месяца (от 1 до 12) и года (например, 2023) соответственно.
Пример:
=МЕСЯЦ(A1) // Вернёт номер месяца (например, 5 для мая)
=ГОД(A1) // Вернёт год (например, 2023)
Чтобы получить название месяца (не номер), комбинируйте МЕСЯЦ() с функцией ТЕКСТ():
=ТЕКСТ(A1; "ММММ") // Полное название (например, "май")
=ТЕКСТ(A1; "МММ") // Сокращённое (например, "май")
- ✅ Плюсы: Простота, работает во всех версиях Excel.
- ❌ Минусы: Возвращает только числовые значения (для месяца) или требует дополнительной функции для текстового формата.
⚠️ Внимание: Если в ячейкеA1хранится текст (например,"15.05.2023"как строка), функцииМЕСЯЦ()иГОД()вернут ошибку#ЗНАЧ!. Преобразуйте данные в формат даты с помощьюДАТАЗНАЧ():=МЕСЯЦ(ДАТАЗНАЧ(A1))
2. Функция ТЕКСТ: гибкое форматирование
Функция ТЕКСТ() позволяет извлечь месяц и год в любом текстовом формате. Это удобно, если нужно получить результат в виде "май 2023" или "05.2023".
Синтаксис:
=ТЕКСТ(дата; "формат")
Примеры форматов:
| Формат | Пример результата | Описание |
|---|---|---|
"ММ.ГГГГ" | 05.2023 | Месяц и год через точку |
"ММММ ГГГГ" | май 2023 | Полное название месяца |
"МММ-ГГ" | май-23 | Сокращённое название и год |
"М;Г" | 5;2023 | Числовые значения через точку с запятой |
Практический пример:
=ТЕКСТ(A1; "ММММ ГГГГ") // Результат: "май 2023"
- 📅 Когда использовать: Для создания отчётов с читаемыми датами.
- 🔄 Альтернатива: Комбинация
МЕСЯЦ()+ГОД()с конкатенацией (&").
3. Извлечение месяца и года в отдельные столбцы
Если нужно разделить дату на месяц и год в разных ячейках, используйте комбинацию функций с ссылкой на исходную дату.
Пример:
=МЕСЯЦ(A1) // Ячейка B1 — номер месяца
=ГОД(A1) // Ячейка C1 — год
=ТЕКСТ(A1; "ММММ") // Ячейка D1 — название месяца
Для автоматизации процесса:
1. Выделите диапазон рядом с датами.
2. Введите формулу для первой ячейки (например, =МЕСЯЦ(A1)).
3. Нажмите Ctrl+Enter, чтобы применить её ко всем выделенным ячейкам.
⚠️ Внимание: При копировании формул убедитесь, что ссылки на ячейки (A1,A2и т.д.) относительные (без знака$). Иначе все ячейки будут ссылаться наA1.
Проверьте формат ячеек с датами (должен быть "Дата", а не "Текст" или "Общий")
Удалите лишние пробелы в ячейках (используйте СЖПРОБЕЛЫ())
Преобразуйте текстовые даты в формат даты (ДАТАЗНАЧ())
Создайте запасные столбцы для результатов-->
4. Power Query: обработка больших массивов данных
Если вам нужно извлечь месяц и год из тысяч строк, ручное применение формул неэффективно. В этом случае поможет инструмент Power Query (доступен в Excel 2016+ и Excel 365).
Пошаговая инструкция:
1. Выделите диапазон с датами.
2. Перейдите на вкладку Данные → Из таблицы/диапазона (или Получить данные → Из таблицы/диапазона).
3. В открывшемся редакторе Power Query выделите столбец с датами.
4. На вкладке Добавить столбец выберите:
- Дата → Месяц → Название месяца (или Номер месяца).
- Дата → Год → Год.
5. Нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.
Преимущества метода:
- Обработка миллионов строк без замедления.
- Возможность объединения данных из нескольких источников.
- Автоматическое обновление при изменении исходных данных.
Как обновить данные после изменения исходного диапазона?
Щёлкните правой кнопкой по таблице с результатами Power Query и выберите Обновить. Если данные подгружаются из внешнего источника (например, SQL или CSV), нажмите Данные → Обновить все.
5. VBA: автоматизация для опытных пользователей
Если вам нужно динамически извлекать месяц и год с дополнительной логикой (например, проверкой на корректность даты), напишите макрос на VBA.
Пример кода:
Sub ExtractMonthYear()
Dim rng As Range
Dim cell As Range
Dim monthCol As Integer, yearCol As Integer
' Указываем столбцы для результатов (B — месяц, C — год)
monthCol = 2
yearCol = 3
' Обрабатываем все заполненные ячейки в столбце A
For Each cell In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
If IsDate(cell.Value) Then
Cells(cell.Row, monthCol).Value = Month(cell.Value)
Cells(cell.Row, yearCol).Value = Year(cell.Value)
Else
Cells(cell.Row, monthCol).Value = "Ошибка"
Cells(cell.Row, yearCol).Value = "Ошибка"
End If
Next cell
End Sub
Как использовать:
1. Нажмите Alt+F11, чтобы открыть редактор VBA.
2. Вставьте код в новый модуль (Insert → Module).
3. Запустите макрос нажатием F5.
- 🔧 Настройка: Измените
monthColиyearCol, чтобы указать нужные столбцы для вывода. - 🛡️ Защита от ошибок: Код проверяет, является ли значение датой (
IsDate), и выводит "Ошибка" для некорректных данных.
⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm (с поддержкой макросов). При открытии файла Excel может заблокировать выполнение макросов — разрешите их в настройках безопасности.
6. Динамические массивы (Excel 365 и 2021)
В последних версиях Excel (365 и 2021) появились динамические массивы, которые позволяют извлекать месяц и год сразу для всего столбца без протягивания формул.
Пример:
=ТЕКСТ(A1:A100; "ММММ ГГГГ")
Эта формула автоматически заполнит столько строк, сколько есть данных в диапазоне A1:A100.
Преимущества:
- Нет нужды протягивать формулу вниз.
- Автоматическое обновление при добавлении новых строк.
- Компактность: одна формула вместо сотен копий.
Динамические массивы — единственный способ в Excel, который позволяет обрабатывать данные в реальном времени без VBA или Power Query.
7. Ошибки и их решение
При работе с датами в Excel часто возникают ошибки. Рассмотрим самые распространённые и способы их исправления.
| Ошибка | Причина | Решение |
|---|---|---|
#ЗНАЧ! | Ячейка содержит текст, а не дату. | Используйте ДАТАЗНАЧ() или преобразуйте формат ячейки. |
#ИМЯ? | Опечатка в названии функции. | Проверьте синтаксис (например, МЕСЯЦ, а не MEСЯЦ). |
###### | Столбец слишком узкий для отображения. | Расширьте столбец или измените формат ячейки. |
| Некорректный месяц (например, 13) | Дата введена неправильно (например, 32.01.2023). | Исправьте исходную дату или используйте ЕСЛИОШИБКА(). |
Как избежать ошибок:
- Всегда проверяйте формат ячеек (Формат ячеек → Дата).
- Используйте функцию ЕСЛИОШИБКА() для обработки исключений:
=ЕСЛИОШИБКА(МЕСЯЦ(A1); "Ошибка")
FAQ: Частые вопросы
Можно ли извлечь месяц и год из даты в формате "DD-MM-YYYY" (текст)?
Да, но сначала преобразуйте текст в дату с помощью ДАТАЗНАЧ() или ПОДСТАВИТЬ() + ДАТА(). Пример:
=ДАТАЗНАЧ(ПОДСТАВИТЬ(A1; "-"; "."))
Если формат всегда одинаковый, используйте:
=ДАТА(ПРАВСИМВ(A1;4); ПСТР(A1;4;2); ЛЕВСИМВ(A1;2))
Как получить квартал вместо месяца?
Используйте функцию ОКРВВЕРХ() или ВЫБОР():
=ОКРВВЕРХ(МЕСЯЦ(A1)/3; 0) // Вернёт номер квартала (1-4)
Или с текстом:
=ВЫБОР(ОКРВВЕРХ(МЕСЯЦ(A1)/3;0); "Q1"; "Q2"; "Q3"; "Q4")
Почему функция ГОД возвращает 1905 вместо 2023?
Это происходит, если в настройках Excel установлена система дат 1904 (вместо стандартной 1900). Чтобы исправить:
- Перейдите в
Файл → Параметры → Дополнительно. - В разделе
При пересчёте этой книгиснимите галочку сИспользовать систему дат 1904. - Сохраните и перезапустите файл.
Как извлечь месяц и год из даты в Google Таблицах?
В Google Sheets используйте те же функции, но с английским синтаксисом:
=MONTH(A1) // Месяц
=YEAR(A1) // Год
=TEXT(A1; "MMMM YYYY") // Текстовый формат
Для названия месяца на русском:
=TEXT(A1; "ММММ ГГГГ")
Можно ли извлечь месяц и год без формул?
Да, с помощью Текст по столбцам:
- Выделите столбец с датами.
- Перейдите в
Данные → Текст по столбцам. - Выберите
С разделителями → Далее. - Укажите разделитель (например, точка или тире).
- Нажмите
Готово— дата разобьётся на день, месяц и год.
Минус метода: месяц и год будут в отдельных столбцах, а не в нужном формате.