Разделение даты на день, месяц и год в Excel: от простых функций до VBA

Почему разделение даты в Excel требует особого подхода

Дата в Microsoft Excel — это не просто текст или число. Под капотом программы каждая дата хранится как последовательный номер, где 1 января 1900 года соответствует числу 1, а текущая дата — уже пятизначному значению. Когда вы вводите 15.07.2026 в ячейку, Excel автоматически преобразует её в формат даты, но внутренне обрабатывает как число 45487 (для 15 июля 2026 года). Эта двойственность и создаёт сложности при разделении.

Проблема усугубляется тем, что пользователи часто пытаются разделить дату как текст — через ТЕКСТ.ПОСЛЕ() или ПСТР(), — но такой подход ломается при смене региональных настроек (например, в американском формате даты месяц идёт первым: 07/15/2026 вместо 15.07.2026). Поэтому надёжные методы должны оперировать не со строковым представлением, а с внутренним числовым значением даты.

В этой статье мы разберём 5 способов разделения даты — от элементарных функций до автоматизации через VBA, — а также покажем, как избежать типичных ошибок при работе с разными форматами дат в Excel 2010–2023 и Office 365.

📊 Какой версии Excel вы пользуетесь?
Excel 2010–2016
Excel 2019–2021
Office 365 (Microsoft 365)
Mac-версия Excel
Другой

Способ 1: Стандартные функции ДЕНЬ(), МЕСЯЦ(), ГОД()

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

Формулы имеют простейший синтаксис:

  • 📅 =ДЕНЬ(A1) — извлекает день (число от 1 до 31)
  • 📆 =МЕСЯЦ(A1) — возвращает месяц (1–12)
  • 🗓️ =ГОД(A1) — показывает год (например, 2026)

Пример: если в ячейке A1 записана дата 15.07.2026, то:

ФормулаРезультатТип данных
=ДЕНЬ(A1)15Число
=МЕСЯЦ(A1)7Число
=ГОД(A1)2026Число
=ТЕКСТ(A1;"дд.мм.гггг")15.07.2026Текст
⚠️ Внимание: Если в ячейке A1 дата хранится как текст (например, после импорта из CSV), функции вернут ошибку #ЗНАЧ!. Чтобы исправить это, предварительно преобразуйте текст в дату с помощью =ДАТАЗНАЧ(A1).

Проверьте формат ячейки с датой (должен быть "Дата", а не "Текст" или "Общий")

Убедитесь, что дата не содержит лишних символов (например, "15.07.2026 г." → удалите " г.")

При импорте из внешних источников используйте =ДАТАЗНАЧ() для преобразования текста в дату

Создайте резервную копию данных перед массовыми изменениями-->

Способ 2: Текстовые функции (ПСТР, ЛЕВСИМВ, ПРАВСИМВ) — когда их можно использовать

Текстовые функции подходят только для дат с фиксированным форматом, где разделители (точка, тире, слеш) стоят на строго определённых позициях. Например, для даты 15-07-2026 можно извлечь компоненты так:

  • 🔢 День: =ЛЕВСИМВ(A1;2) (первые 2 символа)
  • 📌 Месяц: =ПСТР(A1;4;2) (начиная с 4-го символа, длина 2)
  • 📅 Год: =ПРАВСИМВ(A1;4) (последние 4 символа)

Однако этот метод крайне ненадёжен при изменении формата даты. Например, если дата записана как 7/15/2026 (американский формат), та же формула вернёт неверные результаты: день станет 7, а месяц — 15.

Чтобы снизить риски, комбинируйте текстовые функции с проверкой формата:

=ЕСЛИ(ДЛСТР(A1)=10;

ЕСЛИ(ПСТР(A1;3;1)="."; // Проверяем разделитель

ДАТАЗНАЧ(A1); // Если формат "дд.мм.гггг"

"Неверный формат"

);

"Неверная длина"

)

⚠️ Внимание: Текстовые функции не распознают даты как числовые значения. Если вам нужно дальнейшее вычисление (например, прибавить к дню 5), результат ПСТР() придётся конвертировать обратно в число с помощью =--ТЕКСТ.
Как определить формат даты в ячейке?

1. Выделите ячейку с датой.

2. Нажмите Ctrl+1 (или правая кнопка → "Формат ячеек").

3. Перейдите на вкладку "Число".

4. Если выбран формат "Дата", но отображается как текст — значит, данные были введены как строка (например, через импорт).

Способ 3: Функция ТЕКСТ() для гибкого форматирования

Функция ТЕКСТ() позволяет извлечь компоненты даты в любом текстовом виде, не теряя при этом связь с исходным числовым значением. Её главный плюс — универсальность: она работает независимо от региональных настроек Excel.

Синтаксис:

=ТЕКСТ(дата; "формат")

Примеры форматирования:

  • 📅 День: =ТЕКСТ(A1;"д") или =ТЕКСТ(A1;"дд") (с ведущим нулём)
  • 🌙 Месяц: =ТЕКСТ(A1;"м") (число), =ТЕКСТ(A1;"ммм") (сокращённое название, например "июл")
  • 🗓️ Год: =ТЕКСТ(A1;"г") (полный) или =ТЕКСТ(A1;"гг") (две последние цифры)

Преимущество этого метода — возможность получить текстовое представление месяца на русском языке:

=ТЕКСТ(A1;"[$-419]мммм")  // Вернёт "июль" вместо "7"
ФормулаРезультат для 15.07.2026Тип данных
=ТЕКСТ(A1;"д")15Текст
=ТЕКСТ(A1;"мм")07Текст
=ТЕКСТ(A1;"гггг")2026Текст
=ТЕКСТ(A1;"дд ммм гг")15 июл 24Текст

Способ 4: Разделение даты на столбцы (инструмент "Текст по столбцам")

Если вам нужно однократно разделить большой массив дат (например, после импорта из внешней системы), удобнее использовать встроенный инструмент Текст по столбцам. Он работает даже с текстовыми датами, но требует предварительной настройки.

Пошаговая инструкция:

  1. Выделите столбец с датами.
  2. Перейдите на вкладку ДанныеТекст по столбцам.
  3. Выберите С разделителямиДалее.
  4. Укажите разделитель (точка, тире, слеш) или выберите Другой и введите символ вручную.
  5. Нажмите Готово — Excel разобьёт дату на отдельные столбцы.

Ограничения метода:

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

Способ 5: Автоматизация через VBA (для продвинутых пользователей)

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

Sub SplitDate()

Dim rng As Range

Dim cell As Range

Dim i As Integer

Set rng = Selection

i = 1

For Each cell In rng

If IsDate(cell.Value) Then

cell.Offset(0, i).Value = Day(cell.Value)

cell.Offset(0, i + 1).Value = Month(cell.Value)

cell.Offset(0, i + 2).Value = Year(cell.Value)

Else

cell.Offset(0, i).Value = "Ошибка"

End If

Next cell

End Sub

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

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Выделите ячейки с датами в Excel.
  4. Запустите макрос (F5 или через Макросы в меню Вид).

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

  • 🔄 Обрабатывает тысячи строк за секунды.
  • 🛠️ Можно доработать под любой формат даты.
  • 📊 Результат — числа, а не текст (готовы для расчётов).
⚠️ Внимание: Перед запуском макроса сохраните файл в формате .xlsm (с поддержкой макросов) и включите их выполнение в настройках Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы).

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

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

  1. Дата как текст: Если дата импортирована из CSV или введена вручную как строка, функции ДЕНЬ() вернут ошибку. Решение: используйте =ДАТАЗНАЧ() или преобразуйте столбец через Текст по столбцам.
  2. Региональные настройки: В американском Excel формат по умолчанию — мм/дд/гггг. Если ваша дата введена как 07.15.2026, Excel может интерпретировать её как 7-е число 15-го месяца (ошибка!). Решение: явно указывайте формат при вводе или используйте ТЕКСТ().
  3. Двузначные годы: Функция ГОД() для даты 15.07.24 может вернуть 1924 вместо 2026. Решение: всегда вводите годы полностью или используйте =ЕСЛИ(ГОД(A1)<100; ГОД(A1)+2000; ГОД(A1)).

Проверьте себя: если в ячейке A1 записано 31.02.2026, что вернёт формула =ДЕНЬ(A1)?

Ответ

Excel автоматически скорректирует несуществующую дату на 02.03.2026, поэтому =ДЕНЬ(A1) вернёт 2, а не 31. Чтобы избежать такого поведения, используйте проверку =ЕСЛИ(ЕОШИБКА(ДЕНЬ(A1)); "Неверная дата"; ДЕНЬ(A1)).

FAQ: Частые вопросы по разделению дат в Excel

Можно ли разделить дату на день недели?

Да, используйте функцию =ТЕКСТ(A1;"дддд") (вернёт "понедельник", "вторник" и т. д.) или =ДЕНЬНЕД(A1) (вернёт число от 1 до 7, где 1 — воскресенье). Для русского языка добавьте локаль: =ТЕКСТ(A1;"[$-419]дддд").

Как разделить дату и время (например, "15.07.2026 14:30")?

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

  • Для даты: =ЦЕЛОЕ(A1) (отбросит дробную часть)
  • Для времени: =A1-ЦЕЛОЕ(A1) (вернёт время как дробь, например 0,604 для 14:30)
  • Для форматированного времени: =ТЕКСТ(A1;"чч:мм")

Почему функция ГОД() возвращает 1905 вместо 2026?

Это происходит из-за двузначного года (например, в ячейке записано 15.07.24). Excel интерпретирует 24 как 1924. Решения:

  • Вводите годы полностью (2026).
  • Используйте формулу: =ЕСЛИ(ГОД(A1)<100; ГОД(A1)+2000; ГОД(A1)).
  • Настройте систему на 4-значный год в параметрах Windows.

Как разделить дату в Google Таблицах?

В Google Sheets работают те же функции, но с английскими названиями:

  • =DAY(A1) → день
  • =MONTH(A1) → месяц
  • =YEAR(A1) → год
  • =TEXT(A1; "dd/mm/yyyy") → форматированная дата

Для разделения через меню: Данные → Разделить текст на столбцы.

Можно ли разделить дату без формул?

Да, двумя способами:

  1. Копирование с транслитерацией: Скопируйте столбец с датами, затем выполните Специальная вставка → Значения в новые столбцы. Далее используйте Текст по столбцам.
  2. Power Query: Загрузите данные в Power Query (Данные → Получить данные → Из таблицы/диапазона), затем разделите столбец по разделителю.