Как найти строку с помощью VBA в Excel (8 примеров)

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

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

Скачать шаблон практики

Бесплатный практический шаблон Excel можно скачать отсюда.

VBA для поиска в String.xlsm

Функция InStr

В Microsoft Excel есть встроенная функция под названием функция InStr для поиска положения определенных строк в заданном String.

Общий синтаксис:

InStr([start], string1, string2, [compare])

Вот,

Аргументы Обязательный/ Факультативный Определение
запустить Дополнительно Начальная позиция поиска.
  • По умолчанию InStr Функция вычисляет позицию символа, считая от 1, а не от начальной позиции. Поэтому, если хотите, можете оставить это поле пустым.
строка1 Требуется Строка для поиска, Primary String.
строка2 Требуется Строка для поиска в первичной строке.
сравнить Дополнительно Сайт InStr по умолчанию чувствительна к регистру. Но если вы хотите запустить функцию без учета регистра InStr , то вы можете передать сюда аргумент для выполнения определенного сравнения. Этот аргумент может иметь следующие значения,
  • vbBinaryCompare -> выполняет двоичное сравнение, возвращаемое значение 0
  • vbTextCompare -> выполняет текстовое сравнение, возвращаемое значение 1
  • vbDatabaseCompare -> выполняет сравнение базы данных, возвращаемое значение 2

По умолчанию, InStr принимает vbBinaryCompare в качестве аргумента сравнения.

8 простых примеров поиска конкретной позиции строки в заданной строке с помощью VBA

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

1. VBA для поиска позиции текста в строке

Ниже приведен пример InStr для поиска позиции текста в строке.

  • Нажмите Alt + F11 на клавиатуре или перейдите на вкладку Разработчик -> Visual Basic открыть Редактор Visual Basic .

  • Во всплывающем окне кода в строке меню нажмите Вставка -> Модуль .

  • Теперь в окне кода напишите простой InStr программа внутри Подпроцедура VBA (см. ниже).
 Sub INSTR_Example() MsgBox InStr("Счастье - это выбор", "выбор") End Sub 

Теперь ваш код готов к выполнению.

  • Нажмите F5 на клавиатуре или в строке меню выберите Run -> Run Sub/UserForm Вы также можете просто нажать на маленький значок Play в строке подменю, чтобы запустить макрос.

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

Объяснение:

Наша основная строка, " Счастье - это выбор " - это предложение из 21 буквы (с пробелами), и мы хотели найти позицию текста " выбор " в этой строке. Текст " выбор " начинался с 16-й позиции основной струны, следовательно, мы получили число 16 как наш вывод в окне сообщения.

2. VBA для поиска текста с определенной позиции в строке

Теперь давайте выясним, что произойдет, если мы захотим получить позицию от определенного числа.

  • Так же, как и раньше, откройте Редактор Visual Basic из Разработчик вкладка и Вставка a Модуль в окне кода.
  • В окне кода напишите простой InStr программу, показанную выше, и передайте значение в аргументе start в соответствии с позицией, от которой вы хотите отсчитывать текст.
 Sub INSTR_Example() MsgBox InStr(17, "Счастье - это выбор", "выбор") End Sub 

  • Следующий, Запускайте код.

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

Объяснение:

Поскольку мы уже знали (из обсуждения на фазе 1), что текст " выбор " началась с позиции 16 , поэтому мы вставили два " выбор " в основной строке и установите 17 в качестве нашего 1-го параметра, чтобы пропустить первый " выбор ". Итак, мы Запускайте вышеуказанный макрос, и он показал нам номер позиции 27 что в точности соответствует номеру позиции второй " выбор " в заданной строке.

3. VBA для поиска текста в строке с помощью чувствительной к регистру функции InStr

С момента введения InStr вы уже знаете, что по умолчанию InStr Функция чувствительна к регистру. Давайте выясним это на примере.

См. VBA код, где мы хотели найти позицию слова " Выбор " с заглавная "С" в строке " Счастье - это выбор ", где выбор пишется с маленькая буква "с" .

  • Запускайте код и найти 0 как наш выход.

Это потому, что InStr лечение функциями заглавная "С" и маленькая буква "с" по-другому. Поэтому он искал слово " Выбор " в строке и не получил ни одного совпадения, поэтому вернул 0 .

  • Чтобы сделать InStr функция без учета регистра , установите аргумент сравнения в vbTextCompare (см. ниже).
 Sub INSTR_Example() MsgBox InStr(1, "Счастье - это выбор и выбор", "Выбор", vbTextCompare) End Sub 

  • Запускайте код.

Вы получите положение текста из строки, записан ли текст в формате заглавные или строчные буквы .

4. VBA для поиска текста в правой части строки

До сих пор InStr Функция давала нам только позицию с левой стороны строки. Но что если вы хотите найти позицию текста с правой стороны строки.

Функция InStrRev ищет справа. InStrRev функция работает очень похоже на InStr функция найдет позицию текста из файла правая сторона строки.

Чтобы понять разницу, смотрите следующие примеры.

  • Если мы выполним следующий код с InStr функция тогда,

это дает нам позицию ( 16 ) первого текста " выбор ".

  • Но если мы запустим тот же код с InStrRev Функционируйте тогда,

это дает нам позицию ( 27 ) последнего текста " выбор ".

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

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

5. VBA для поиска позиции символа в строке

Вы также можете найти позицию определенного символа в строке таким же образом, как и при поиске текста.

  • Скопируйте следующий код в свой VBA кодовое окно
 Sub Find_Character() Dim z As Long z = InStr("Счастье - это выбор", "e") MsgBox z End Sub 

  • И Запускайте макрос.

Первый " e " в нашей заданной строке находится под номером 7 должность.

6. VBA для поиска подстроки в строке

Здесь мы узнаем, как найти, содержит ли строка символ подстрока или нет.

Чтобы получить это, мы должны запустить Заявление КЧ в нашем коде.

  • Так же, как и раньше, откройте Редактор Visual Basic из Разработчик вкладка и Вставка a Модуль в окне кода.
  • В окне кода скопируйте следующий код и вставьте его.
 Public Sub FindSub() If InStr("Счастье - это выбор", "выбор") = 0 Then MsgBox "Соответствие не найдено" Else MsgBox "Соответствие найдено" End If End Sub 

Теперь ваш код готов к выполнению.

  • Запускайте макрос.

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

7. VBA для поиска строки в диапазоне ячеек

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

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

  • Ниже приведен код для получения результата, о котором говорилось выше,
 Sub Find_String_in_Range() Dim cell As Range For Each cell In Range("B5:B10") If InStr(cell.Value, "Dr.")> 0 Then cell.Offset(0, 1).Value = "Doctor" End If Next cell End Sub 

  • Запускайте код и результат показан ниже

  • Вы можете изменить макрос в соответствии с вашими потребностями. Например, если вы хотите найти " Проф. " в любой ячейке строки, и получите " Профессор " в качестве возврата, тогда просто передайте " Проф. " в качестве значения вместо " Доктор ." в 4-й строке макроса и " Профессор " вместо " Доктор " в 5-й строке макроса и соответствующим образом определите номер диапазона ячеек.

8. VBA для поиска строки в ячейке

Вы также можете поиск определенного текста в одной ячейке строки и вернуть определенную строку.

  • Скопируйте следующий код и вставьте его в окно кода.
 Sub Find_String_in_Cell() If InStr(Range("B5").Value, "Dr.")> 0 Then Range("C5").Value = "Doctor" End If End Sub 

Он будет искать " Др. " в Клетка B5 и если он находит совпадение, то возвращает " Доктор " в Клетка C5 .

  • Вы можете изменить макрос в соответствии с вашими потребностями. Например, если вы хотите найти " Проф. " в любой ячейке строки, и получите " Профессор " в качестве возврата, тогда просто передайте " Проф. " в качестве значения вместо " Доктор ." во 2-й строке макроса и " Профессор " вместо " Доктор " в 3-й строке макроса и соответствующим образом определите номер ссылки ячейки.

Заключение

В этой статье было показано, как найти определенные тексты в строке в Excel, используя Макрос VBA. Я надеюсь, что эта статья была очень полезна для вас. Не стесняйтесь задавать любые вопросы по теме.

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