Извлечение выбранных слов или словосочетаний из строк, записанных в ячейки Excel, с помощью кода VBA. Выбор слов по индексу, а словосочетаний — удалением лишнего.
Извлечение слов из строки
Иногда работа с текстовыми данными в Excel требует извлечения из строк отдельных слов или словосочетаний. Например, если в выгрузке списка товаров наименования размещены в одной ячейке вместе с краткими описаниями или какими-то лишними характеристиками.
Процесс извлечения отдельных слов из ячеек можно автоматизировать с помощью кода VBA. Макросы ниже позволяют интерактивно выбирать нужное слово (или словосочетание) из каждой строки и записывать его в соседнюю ячейку справа.
Извлечение слов по индексу
Извлечение одного слова из строки, записанной в ячейку Excel, по его порядковому номеру (индексу):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
Sub ВыборСловаПоНомеру() ' Переменные Dim delimiter As String Dim rng As Range Dim cell As Range Dim words() As String Dim wordCount As Long Dim i As Long Dim userInput As Variant Dim promptText As String Dim trimmedText As String ' Установите нужный разделитель (по умолчанию пробел) delimiter = " " ' Определяем диапазон для обработки: от активной ячейки до последней непустой в этом столбце With ActiveSheet Dim lastRow As Long lastRow = .Cells(.Rows.count, ActiveCell.Column).End(xlUp).Row Set rng = .Range(ActiveCell, .Cells(lastRow, ActiveCell.Column)) End With ' Обход всех ячеек в диапазоне For Each cell In rng ' Пропускаем пустые ячейки If Not IsEmpty(cell.Value) Then ' Удаляем лишние пробелы (начальные, конечные, множественные) trimmedText = Application.WorksheetFunction.Trim(cell.Value) ' Разбиваем строку на слова по разделителю words = Split(trimmedText, delimiter) wordCount = UBound(words) - LBound(words) + 1 ' Если слов нет (пустая строка после Trim) - пропускаем If wordCount = 0 Then GoTo NextCell ' Формируем текст приглашения с нумерованным списком слов promptText = "Слова в ячейке " & cell.Address(False, False) & ":" & vbCrLf & vbCrLf For i = 0 To wordCount - 1 ' Ограничиваем вывод, если слов слишком много (отображаем первые 10) If i < 10 Then promptText = promptText & (i + 1) & ". " & words(i) & vbCrLf Else promptText = promptText & "... и еще " & (wordCount - 10) & " слов." & vbCrLf Exit For End If Next i promptText = promptText & vbCrLf & "Введите номер слова и нажмите «ОК»" ' Запрос номера слова (Type:=1 означает число) Do userInput = Application.InputBox(promptText, "Выбор слова", Type:=1) ' Если нажата Отмена или превышено количество знаков – завершаем процедуру On Error Resume Next If userInput = False Then If Err.Number <> 0 Then MsgBox "Превышено количество знаков. Уменьшите количество слов.", vbCritical Exit Sub End If MsgBox "Операция отменена пользователем.", vbInformation Exit Sub End If ' Проверяем, что номер в допустимом диапазоне If userInput >= 1 And userInput <= wordCount Then Exit Do Else MsgBox "Некорректный номер. Введите число от 1 до " & wordCount & ".", vbExclamation End If Loop ' Записываем выбранное слово в соседний столбец справа cell.Offset(0, 1).Value = words(userInput - 1) End If NextCell: Next cell MsgBox "Обработка завершена.", vbInformation End Sub |
Ограничение количества слов обусловлено тем, что ограничено количество знаков, допустимых для параметра Prompt диалогового окна InputBox. Я установил 10 слов, так как моя версия VBA Excel допускает загрузку около 10 слов среднего размера. Если количество знаков будет превышено, произойдет ошибка.
Для решения этой проблемы добавлен обработчик ошибок при превышении количества знаков с сообщением о необходимости уменьшить количество отображаемых слов.
Обзор работы макроса
- Пользователь активирует первую ячейку столбца с данными.
- Макрос определяет диапазон — от активной ячейки до последней непустой в этом столбце.
- Для каждой ячейки:
- Очищается строка от лишних пробелов.
- Разбивается на слова по указанному разделителю (по умолчанию — пробел).
- Выводится диалоговое окно с пронумерованным списком слов.
- Пользователь вводит номер слова.
- Выбранное слово записывается в соседнюю ячейку справа.
- Если пользователь нажимает «Отмена» в любом окне ввода — макрос немедленно завершается.
- По окончании обработки всех ячеек выводится сообщение об успешном завершении.
Результат работы кода

Настройка под свои задачи
Смена разделителя
По умолчанию используется пробел. Если ваши слова разделены, например, запятой, точкой с запятой или другим символом, измените значение переменной delimiter:
|
1 2 3 |
delimiter = "," ' запятая delimiter = ";" ' точка с запятой delimiter = "|" ' вертикальная черта |
Запись результата
Строка cell.Offset(0, 1).Value означает: записать в ту же строку, но на 1 столбец правее. Если нужно на 2 столбца правее — напишите Offset(0, 2). Чтобы записать в столбец слева — используйте отрицательное число: Offset(0, -1).
Извлечение словосочетаний
Извлечение словосочетания из строки, записанной в ячейку Excel, после ручного удаления лишних слов в текстовом поле диалогового окна:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Sub ВыборСловосочетания() ' Переменные Dim rng As Range Dim cell As Range Dim userInput As Variant Dim trimmedText As String ' Определяем диапазон для обработки: от активной ячейки до последней непустой в этом столбце With ActiveSheet Dim lastRow As Long lastRow = .Cells(.Rows.count, ActiveCell.Column).End(xlUp).Row Set rng = .Range(ActiveCell, .Cells(lastRow, ActiveCell.Column)) End With ' Обход всех ячеек в диапазоне For Each cell In rng ' Пропускаем пустые ячейки If Not IsEmpty(cell.Value) Then ' Удаляем лишние пробелы (начальные, конечные, множественные) trimmedText = Application.WorksheetFunction.Trim(cell.Value) userInput = Application.InputBox("Удалите лишнее и нажмите «OK»", "Выбор словосочетания", trimmedText) ' Если нажата Отмена или превышено количество знаков – завершаем процедуру On Error Resume Next If userInput = False Then If Err.Number <> 0 Then MsgBox "Превышено количество знаков. Уменьшите количество слов в ячейке: " & cell.Address, vbCritical Exit Sub End If MsgBox "Операция отменена пользователем.", vbInformation Exit Sub End If ' Записываем выбранное словосочетание в соседний столбец справа cell.Offset(0, 1).Value = userInput End If Next cell MsgBox "Обработка завершена.", vbInformation End Sub |
Обзор работы макроса
- Пользователь активирует первую ячейку столбца с данными.
- Макрос определяет диапазон — от активной ячейки до последней непустой в этом столбце.
- Для каждой ячейки:
- Очищается строка от лишних пробелов.
- Выводится диалоговое окно со строкой из ячейки в текстовом поле.
- Пользователь удаляет лишние слова и нажмает «OK».
- Оставшееся словосочетание (слово) записывается в соседнюю ячейку справа.
- Если пользователь нажимает «Отмена» в любом окне ввода — макрос немедленно завершается.
- По окончании обработки всех ячеек выводится сообщение об успешном завершении.
Результат работы кода

Эти макросы позволяют превратить монотонную ручную работу по извлечению слов и словосочетаний из ячеек в удобное взаимодействие с диалоговым окном InputBox. Результатом этого являются меньшая утомляемость и экономия рабочего времени.