Как найти подстроку с помощью VBA (9 способов)

  • Поделись Этим
Hugh West

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

Скачать рабочую тетрадь

Образец содержания

9 способов найти подстроку с помощью VBA

Здесь у меня есть следующая таблица данных, в которой я покажу способы поиска подстроки в строке с помощью VBA. Я также попытаюсь показать способы поиска подстроки в случайной строке.

Я выполнил эту задачу, используя Microsoft Excel 365 версию, вы можете использовать любую другую версию в зависимости от вашего удобства.

Метод-1: Поиск подстроки в строке с помощью VBA

Если вы хотите найти нужную подстроку в строке с помощью VBA, вы можете использовать функция InStr в коде VBA.

Шаг-01 :

➤ Перейти к Разработчик Tab>> Visual Basic Вариант

Затем Редактор Visual Basic откроется.

➤ Перейти к Вставка Tab>> Модуль Вариант

После этого Модуль будет создан.

Шаг-02 :

➤ Напишите следующий код

 Sub FindFirst() Dim Pos As Integer Pos = InStr(1, "I think therefore I am", "think") MsgBox Pos End Sub 

Вот, InStr(1, "I think therefore I am", "think") вернет позицию подстроки строки. 1 это начальная позиция, " Я думаю, поэтому я есть". это строка, в которой вы найдете нужную подстроку, а "думать" это подстрока, которую вы хотите найти. По умолчанию она чувствительна к регистру, поэтому следите за регистром вашей подстроки, которую вы хотите найти.

➤ Нажмите F5

Результат :

После этого вы получите следующее Ящик для сообщений содержащий позицию "думать" подстрока.

Метод-2: Поиск подстроки в строке с учетом регистра

Если вы хотите найти нужную подстроку в строке независимо от регистра с помощью VBA, то следуйте этому методу.

Шаг-01 :

➤ Follow Шаг-01 из Метод-1

 Public Sub caseinsensitive() Dim Pos As Integer Pos = InStr(1, "I Think Therefore I Am", "think",vbTextCompare) MsgBox Pos End Sub 

Вот, vbTextCompare используется для поиска подстроки без учета регистра.

➤ Нажмите F5

Результат :

Затем вы получите следующее Ящик для сообщений содержащий позицию "думать" подстрока.

Вы можете сделать то же самое, используя следующий код.

 Option Compare Text Public Sub caseinsensitive() Dim Pos As Integer Pos = InStr(1, "I Think Therefore I Am", "think") MsgBox Pos End Sub 

Вот, Текст для сравнения опций найдет подстроку без учета регистра.

➤ Нажмите F5

Результат :

После этого вы получите следующее Ящик для сообщений содержащий позицию "думать" подстрока.

Метод-3: Использование функции InstrRev в VBA

Здесь я покажу, как найти подстроку из конца строки.

Шаг-01 :

➤ Follow Шаг-01 из Метод-1

 Sub FindFromEnd() MsgBox InStrRev("I think therefore I am", "I") End Sub 

InStrRev будет находить подстроку с правой стороны, а не с левой.

➤ Нажмите F5

Результат :

Затем вы получите следующее Ящик для сообщений содержащий позицию второго "I" подстроку с правой стороны.

Метод-4: Поиск позиции подстроки в строке в диапазоне данных

Если вы хотите найти специальный символ "@" в Email Id , тогда следуйте этому методу. Я добавил сюда Позиционная колонка для этой цели.

Шаг-01 :

➤ Follow Шаг-01 из Метод-1

 Function FindSubstring(value As Range) As Integer Dim Pos As Integer Pos = InStr(1, value, "@") FindSubstring = Pos End Function 

Она создаст функцию с именем FindSubstring (вы можете использовать любое другое имя)

значение это ссылка на ячейку, которая содержит строку, и она объявляется как Диапазон .

Шаг-02 :

➤ Выберите выход Ячейка E5

➤Тип следующей функции (созданной VBA )

= Найти подстроку(D5)

D5 это ячейка, содержащая строку.

➤ Нажмите ENTER

➤ Перетащите вниз Наполнительная рукоятка Инструмент

Результат :

После этого вы получите позиции специального символа " @" в Email Id .

Похожие чтения:

  • Как найти строку в ячейке с помощью VBA в Excel (2 метода)
  • FindNext Использование VBA в Excel (2 примера)
  • Как найти строку с помощью VBA в Excel (8 примеров)
  • VBA Найти последнюю строку в Excel (5 способов)

Метод-5: Проверка определенной подстроки в строке в диапазоне данных

Предположим, вы хотите написать Пройти или Не вести переписку к именам студентов в зависимости от Колонка результатов где Пройти или Провал была заключена в скобку. Чтобы найти эту подстроку в Колонка результатов и запишите это в Колонка "Прошел или не прошел следуйте этому методу.

Шаг-01 :

➤ Follow Шаг-01 из Метод-1

 Sub CheckSubstring() Dim cell As Range For Each cell In Range("C5:C10") If InStr(cell.value, "Pass")> 0 Then cell.Offset(0, 1).value = "Passed" Else cell.Offset(0, 1).value = "Failed" End If Next cell End Sub 

Здесь диапазон ячеек C5:C10 который является Колонка результатов

InStr(cell.value, "Pass")> 0 это условие, при котором число больше нуля (когда ячейка содержит "Пас" ), то следующая строка будет продолжена и выдаст результат в соседней ячейке в виде Передано .

Если условие становится ложным, это означает, что ячейка не содержит никаких "Пас" тогда строка под Else выполнится и даст выходное значение в соседней ячейке как Не удалось .

Этот цикл будет продолжаться для каждой ячейки.

➤ Нажмите F5

Результат :

После этого вы получите следующие выходные данные в окне Пройти или не пройти колонна.

Метод-6: Проверка определенной подстроки в строке и извлечение данных

Я покажу, как найти названных учеников. Майкл в Колонка "Имя студента и извлечь соответствующие данные с помощью VBA в этом методе.

Шаг-01 :

➤ Follow Шаг-01 из Метод-1

 Sub Extractdata() Dim lastusedrow As Long Dim i As Integer, icount As Integer lastusedrow = ActiveSheet.Range("B100").End(xlUp).Row For i = 1 To lastusedrow If InStr(1, Range("B" & i), "Michael")> 0 Then icount = icount + 1 Range("E" & icount & ":G" & icount) = Range("B" & i & ":D" & i).value End If Next i End Sub 

Здесь я использовал B100 как Активный диапазон листов но вы можете использовать любой диапазон в соответствии с вашими потребностями.

InStr(1, Range("B" & i), "Michael")> 0 это условие для проверки, если ячейка в столбце B содержит Майкл

Range("E" & icount & ":G" & icount) это диапазон, в котором вы хотите получить выходные данные и Range("B" & i & ":D" & i).value даст значения из столбцов B на D .

➤ Нажмите F5

Результат :

После этого вы получите следующие извлеченные данные для студентов с именем Майкл .

Метод-7: Поиск подстроки для слова

Если вы хотите найти подстроку как слово, то следуйте этому методу.

Шаг-01 :

➤ Follow Шаг-01 из Метод-1

 Sub Stringforword() Dim j As Integer j = InStr("Вот что я есть", "есть") If j = 0 Then MsgBox "Слово не найдено" Else MsgBox "Слово найдено в позиции: " & j End If End Sub 

Он проверит, содержит ли строка это и тогда его положение будет задано

➤ Нажмите F5

Результат :

После этого вы получите следующее окно с сообщением, в котором показано слово, найденное в положении:6 (положение это ).

Вы можете проверить этот код для слова, которого нет в строке.

➤ Введите следующий код

 Sub Stringforword() Dim j As Integer j = InStr("Вот что я есть", "есть") If j = 0 Then MsgBox "Слово не найдено" Else MsgBox "Слово найдено в позиции: " & j End If End Sub 

➤ Нажмите F5

Результат :

После этого вы получите следующее окно с сообщением, в котором показано слово не найдено .

Метод-8: Использование функций Instr и LEFT

Здесь я объясню, как найти позицию подстроки в строке и извлечь тексты перед этой подстрокой с помощью функции VBA и функция ЛЕВША .

Шаг-01 :

➤ Follow Шаг-01 из Метод-1

 Sub InstrandLeft() Dim txt As String Dim j As Long txt = "Вот что я такое" j = InStr(txt, "is") MsgBox Left(txt, j - 1) End Sub 

j = InStr(txt, "is") позиция подстроки это и Left(txt, j - 1) будет извлекать подстроки перед это .

➤ Нажмите F5

Результат :

После этого вы получите следующее окно сообщения, в котором будет показано Здесь (подстрока перед это ).

Метод-9: Выделение жирной чертой определенной подстроки в строке

Вы можете выделить жирным шрифтом оценки перед скобками в Колонка результатов следуя этому методу.

Шаг-01 :

➤ Follow Шаг-01 из Метод-1

 Sub Boldingsubstring() Dim Cell As Range Dim txt As Integer For Each Cell In Selection txtCount = Len(Cell) txt = InStr(1, Cell, "(") Cell.Characters(1, txt - 1).Font.Bold = True Next Cell End Sub 

txt = InStr(1, Cell, "(")) вернет позицию первой скобки и Cell.Characters(1, txt - 1).Font.Bold сделает подстроку, расположенную перед первой скобкой Смелый .

Шаг-02 :

➤ Выберите Колонка результатов

➤ Перейти к Разработчик Tab>> Макросы Вариант

Затем, а Макро появится мастер.

➤ Выберите Полужирный подстрочник (кодовое имя VBA), а затем Запускайте .

Результат :

После этого оценки в Результат Колонка будут выделены жирным шрифтом.

Практическая секция

Для самостоятельного выполнения практики мы предоставили Практика раздел, как показано ниже, в листе с именем Практика Пожалуйста, сделайте это сами.

Заключение

В этой статье я попытался рассказать о самых простых способах поиска подстроки с использованием VBA Если у вас есть какие-либо предложения или вопросы, не стесняйтесь поделиться ими с нами.

Хью Уэст — опытный тренер и аналитик Excel с более чем 10-летним опытом работы в отрасли. Он имеет степень бакалавра в области бухгалтерского учета и финансов и степень магистра делового администрирования. Хью страстно любит преподавать и разработал уникальный подход к обучению, которому легко следовать и который легко понять. Его экспертные знания Excel помогли тысячам студентов и специалистов по всему миру улучшить свои навыки и преуспеть в своей карьере. В своем блоге Хью делится своими знаниями со всем миром, предлагая бесплатные учебные пособия по Excel и онлайн-обучение, чтобы помочь отдельным лицам и компаниям полностью раскрыть свой потенциал.