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

Работа с текстовыми данными в Microsoft Excel часто требует извлечения отдельных слов или фрагментов из ячеек.hether вам нужно разделить ФИО на составляющие, выделить артикулы из описаний товаров или очистить данные от лишних символов — задача актуальна для аналитиков, маркетологов и офисных сотрудников. В этой статье мы разберём 7 проверенных методов, включая стандартные функции, Power Query и VBA, чтобы вы могли выбрать оптимальный вариант для вашей задачи.

Особенность извлечения слов в том, что текст в ячейках может иметь разную структуру: разделяться пробелами, запятыми, тире или другими символами. Мы рассмотрим универсальные решения, которые работают с любыми разделителями, а также специализированные приёмы для типовых сценариев — например, когда нужно достать второе слово из предложения или последнее слово в ячейке. Все методы протестированы на Excel 2019–2023 и Microsoft 365.

1. Базовые функции: LEFT, RIGHT, MID и FIND

Для простых задач достаточно стандартных текстовых функций. Они подходят, когда положение слова в тексте фиксировано (например, всегда первое или третье) или когда разделитель одинаковый во всех ячейках.

Допустим, у вас в ячейке A1 текст "Артикул: T-45678 Описание", и нужно извлечь артикул (T-45678). Алгоритм:

  1. Найти позицию символа ":" с помощью =FIND(":", A1).
  2. Найти позицию первого пробела после двоеточия: =FIND(" ", A1, FIND(":", A1)).
  3. Использовать MID, чтобы вырезать фрагмент между этими позициями:
    =MID(A1; FIND(":", A1)+1; FIND(" ", A1, FIND(":", A1)) - FIND(":", A1) - 1)

Для извлечения первого слова из ячейки (до первого пробела) подойдёт комбинация LEFT и FIND:

=LEFT(A1; FIND(" "; A1) - 1)

2. Функция TEXTSPLIT (Excel 365 и 2021)

В новых версиях Excel появилась революционная функция TEXTSPLIT, которая упрощает разделение текста по разделителям. Она автоматически разбивает строку на массив слов и позволяет выбрать нужный элемент.

Синтаксис:

=TEXTSPLIT(текст; [разделитель_столбцов]; [разделитель_строк]; [игнорировать_пустые]; [соответствие_точному_разделителю]; [разделитель_по_регулярному_выражению])

Примеры:

  • 🔹 Разделить текст по пробелам и вернуть второе слово:
    =INDEX(TEXTSPLIT(A1; " "); 1; 2)
  • 🔹 Разделить по запятым и вернуть массив всех элементов:
    =TEXTSPLIT(A1; ",")
  • 🔹 Разделить по нескольким разделителям (пробел, запятая, точка с запятой):
    =TEXTSPLIT(A1; {" "; ","; ";"})
Что делать, если TEXTSPLIT недоступна?

Если у вас старая версия Excel (до 2021 года), используйте комбинацию TEXTJOIN + FILTERXML (для Windows) или создайте пользовательскую функцию на VBA. Подробности — в разделе про Power Query.

3. Извлечение слов по номеру позиции (с использованием TEXTAFTER и TEXTBEFORE)

В Excel 365 появились функции TEXTAFTER и TEXTBEFORE, которые идеально подходят для извлечения слов по их порядковому номеру. Эти функции возвращают текст после или до указанного разделителя.

Пример: извлечь третье слово из ячейки A1 ("Яблоки груши бананы апельсины"):

=TEXTAFTER(TEXTAFTER(A1; " "; 1); " "; 1)

Пояснение: первая TEXTAFTER вернёт текст после первого пробела ("груши бананы апельсины"), вторая — после второго пробела ("бананы апельсины"), а затем можно применить TEXTBEFORE, чтобы получить "бананы".

Для извлечения последнего слова используйте:

=TEXTAFTER(A1; " "; -1)

Аргумент -1 означает "последний разделитель".

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

4. Power Query: универсальный инструмент для сложных задач

Power Query (или Get & Transform в новых версиях) — это встроенный ETL-инструмент Excel, который позволяет обрабатывать большие объёмы данных без формул. Он идеален, когда нужно:

  • 📊 Разделить текст по нескольким разделителям одновременно.
  • 🔄 Применить преобразование ко многим файлам или листам.
  • 🔍 Извлечь слова по сложным правилам (например, "все слова после двоеточия, но до запятой").

Алгоритм действий:

  1. Выделите диапазон с данными и перейдите на вкладку Данные → Получение данных → Из таблицы/диапазона.
  2. В открывшемся редакторе Power Query выделите столбец с текстом.
  3. На вкладке Преобразование выберите Разделить столбец → По разделителю.
  4. Укажите разделитель (пробел, запятая и т. д.) и нажмите OK.
  5. Удалите ненужные столбцы и загрузите данные обратно в Excel.

✅ Убедитесь, что текст в одном формате (нет лишних пробелов в начале/конце)

✅ Проверьте, одинаковые ли разделители во всех строках

✅ Преобразуйте диапазон в таблицу (Ctrl+T)

✅ Сохраните исходные данные (Power Query перезаписывает их по умолчанию)-->

Преимущество Power Query в том, что все шаги сохраняются, и при обновлении исходных данных достаточно нажать Обновить, чтобы изменения применились автоматически.

5. VBA: пользовательские функции для гибкой обработки

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

Function ExtractWord(rng As Range, wordNumber As Integer) As String

Dim words() As String

words = Split(rng.Value, " ")

If wordNumber <= UBound(words) + 1 And wordNumber > 0 Then

ExtractWord = words(wordNumber - 1)

Else

ExtractWord = "Слово не найдено"

End If

End Function

Чтобы использовать её:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. Вернитесь в Excel и используйте функцию как стандартную: =ExtractWord(A1; 3) (для третьего слова).

Для извлечения слов по регулярным выражениям (например, всех чисел или слов в кавычках) можно использовать следующий код:

Function ExtractByPattern(rng As Range, pattern As String) As String

Dim regex As Object

Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = pattern

regex.Global = True

If regex.Test(rng.Value) Then

ExtractByPattern = regex.Execute(rng.Value)(0)

Else

ExtractByPattern = "Совпадений не найдено"

End If

End Function

Пример использования: =ExtractByPattern(A1; "\d+") — извлечёт первое число из текста.

6. Извлечение слов с помощью FILTERXML (только для Windows)

Функция FILTERXML предназначена для работы с XML-данными, но её можно адаптировать для разделения текста. Этот метод работает только в Windows-версии Excel и требует предварительной подготовки данных.

Пример: разделить текст в A1 по пробелам и вернуть второе слово:

=FILTERXML("" & SUBSTITUTE(A1; " "; "") & ""; "//s[2]")

Пояснение:

  • 🔧 SUBSTITUTE заменяет пробелы на теги <s> и </s>, создавая XML-структуру.
  • 🔧 FILTERXML извлекает второй элемент (//s[2]) из этой структуры.

Чтобы вернуть последнее слово, используйте:

=FILTERXML("" & SUBSTITUTE(A1; " "; "") & ""; "//s[last()]")

7. Специальные случаи: извлечение слов в нестандартных форматах

Иногда текст имеет неочевидную структуру. Рассмотрим типовые сценарии и решения для них:

Сценарий Пример данных Формула
Текст в кавычках Товар "iPhone 15" в наличии
=MID(A1; FIND(""""; A1)+1; FIND(""""; A1; FIND(""""; A1)+1) - FIND(""""; A1) - 1)
Слова после двоеточия Категория: Электроника
=TRIM(RIGHT(SUBSTITUTE(A1; ":"; REPT(" "; 100)); 100))
Слова между скобками Модель (S23 Ultra) продаётся
=MID(A1; FIND("("; A1)+1; FIND(")"; A1) - FIND("("; A1) - 1)
Текст с разделителями-табуляциями Яблоки[ТАБ]Груши[ТАБ]Бананы
=TRIM(MID(SUBSTITUTE(A1; CHAR(9); REPT(" "; 100)); (N-1)*100+1; 100))
где N — номер слова

Для текста с несколько разделителями (например, "Яблоки, груши; бананы") сначала замените все разделители на один символ:

=SUBSTITUTE(SUBSTITUTE(A1; ","; " "); ";"; " ")

А затем примените любой из описанных выше методов.

Как обработать текст с переносами строк?

Если текст содержит перenosы строк (символ CHAR(10)), замените их на пробелы перед обработкой:

=SUBSTITUTE(A1; CHAR(10); " ")

Или используйте TEXTSPLIT с указанием переноса как разделителя:

=TEXTSPLIT(A1; CHAR(10))

Частые ошибки и как их избежать

При извлечении слов пользователи часто сталкиваются с типичными проблемами:

⚠️ Внимание: Если функция FIND возвращает ошибку #VALUE!, это означает, что искомый разделитель отсутствует в тексте. Всегда проверяйте данные на наличие разделителей или используйте IFERROR.

Другие распространённые ошибки:

  • 🚫 Лишние пробелы: Функции LEFT/MID учитывают все символы, включая пробелы. Используйте TRIM, чтобы удалить лишние:
    =TRIM(A1)
  • 🚫 Регистр символов: Функции FIND и SEARCH чувствительны к регистру. Для поиска без учёта регистра используйте SEARCH.
  • 🚫 Пустые ячейки: Если ячейка пустая, формулы вернут ошибку. Оберните их в IF:
    =IF(A1=""; ""; ваша_формула)
⚠️ Внимание: В Excel для Mac некоторые функции (например, FILTERXML) недоступны. Перед использованием метода проверьте его совместимость с вашей версией.

FAQ: Ответы на популярные вопросы

Как извлечь слово, если разделитель — запятая с пробелом (например, "яблоки, груши")?

Используйте TEXTSPLIT с указанием разделителя ", " (запятая + пробел):

=TEXTSPLIT(A1; ", ")

Или замените запятую с пробелом на один символ перед обработкой:

=SUBSTITUTE(A1; ", "; "|")

А затем разделите по символу "|".

Можно ли извлечь слово по частичному совпадению (например, все слова, содержащие "про")?

Да, с помощью VBA или Power Query. Пример функции на VBA:

Function ExtractByPart(rng As Range, part As String) As String

Dim words() As String, result As String, i As Integer

words = Split(rng.Value, " ")

For i = LBound(words) To UBound(words)

If InStr(1, words(i), part, vbTextCompare) > 0 Then

result = result & words(i) & " "

End If

Next i

ExtractByPart = Trim(result)

End Function

Использование: =ExtractByPart(A1; "про").

Как автоматически обновлять извлечённые слова при изменении исходного текста?

Если вы используете формулы, они обновляются автоматически. Для Power Query нажмите Данные → Обновить все. В VBA добавьте в код обработчик событий Worksheet_Change, чтобы функция пересчитывалась при изменении данных.

Что делать, если текст на кириллице и латинице, а нужно извлечь только кириллические слова?

Используйте VBA с проверкой символов по Unicode:

Function ExtractCyrillic(rng As Range) As String

Dim words() As String, result As String, i As Integer, j As Integer, isCyrillic As Boolean

words = Split(rng.Value, " ")

For i = LBound(words) To UBound(words)

isCyrillic = True

For j = 1 To Len(words(i))

If Asc(Mid(words(i), j, 1)) < 1040 Or Asc(Mid(words(i), j, 1)) > 1103 Then

isCyrillic = False

Exit For

End If

Next j

If isCyrillic Then result = result & words(i) & " "

Next i

ExtractCyrillic = Trim(result)

End Function

Как извлечь слово, если разделитель — это комбинация символов (например, "→")?

Замените комбинацию на один уникальный символ (например, "|"), а затем разделите текст:

=TEXTSPLIT(SUBSTITUTE(A1; "→"; "|"); "|")

Или используйте FIND с указанием позиции комбинации:

=MID(A1; FIND("→"; A1)+2; FIND(" "; A1; FIND("→"; A1)) - FIND("→"; A1) - 2)