Как найти точное совпадение с помощью VBA в Excel (5 способов)

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

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

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

VBA Найти точное соответствие.xlsm

5 способов найти точное совпадение с помощью VBA

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

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

Метод-1: Поиск точного совпадения в диапазоне ячеек

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

Здесь я собираюсь найти точное совпадение для студента по имени "Иосиф Микаэль" .

Шаг-01 :

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

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

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

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

Шаг-02 :

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

 Sub searchtxt() Dim rng As Range Dim str As String Set rng = Sheets("exact match").Range("B5:B10").Find("Joseph Michael", LookIn:=xlValues) If Not rng Is Nothing Then str = rng.Address MsgBox (rng & " in " & str) End If End Sub 

Вот, "точное совпадение" это имя листа и "B5:B10" это диапазон имен студентов, и "Джозеф Майкл" это имя студента, которое необходимо выяснить.

rng объявляется как объект диапазона и str в качестве строковой переменной для хранения адреса искомого элемента.

Сайт ЕСЛИ оператор присваивает адрес элемента элементу str переменная.

➤ Нажмите F5

Результат :

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

Читать далее: Поиск в диапазоне с помощью VBA в Excel: включая точное и частичное совпадение

Метод-2: Поиск точного совпадения и замена с помощью VBA

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

Шаг-01 :

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

 Sub FindandReplace() Dim rng As Range Dim str As String With Worksheets("find&replace").Range("B5:B10") Set rng = .Find("Donald Paul", LookIn:=xlValues) If Not rng Is Nothing Then str = rng.Address Do rng.Value = Replace(rng.Value, "Donald Paul", "Henry Jackson") Set rng = .FindNext(rng) Loop While Not rng Is Nothing End If End With End Sub 

Вот, "найти&заменить" это имя листа и "B5:B10" это диапазон имен студентов, и "Дональд Пол" имя студента, которое необходимо выяснить, а затем "Генри Джексон" будет имя студента вместо предыдущего.

С позволит избежать повторения этого фрагмента кода в каждом операторе.

Сайт ЕСЛИ оператор присваивает адрес элемента элементу str переменная и СДЕЛАТЬ цикл заменит все вхождения искомого слова.

➤ Нажмите F5

Результат :

После этого вы получите имя нового студента как "Генри Джексон" .

Метод-3: Поиск точного и чувствительного к регистру совпадения

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

Шаг-01 :

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

 Sub exactmatch() Dim rng As Range Dim str As String With Worksheets("case-sensitive").Range("B5:B10") Set rng = .Find("Donald Paul", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True) If Not rng Is Nothing Then str = rng.Address Do rng.Value = Replace(rng.Value, "Donald Paul", "Henry Jackson") Set rng = .FindNext(rng) Loop While Not rng Is Nothing End If End With End With EndSub 

Вот, "чувствительный к регистру" это имя листа и "B5:B10" это диапазон имен студентов, и "Дональд Пол" имя студента, которое необходимо выяснить, а затем "Генри Джексон" будет имя студента вместо предыдущего.

С позволит избежать повторения этого фрагмента кода в каждом операторе.

Сайт ЕСЛИ оператор присваивает адрес элемента элементу str переменная и СДЕЛАТЬ цикл заменит все вхождения искомого слова.

➤ Нажмите F5

Результат :

Теперь, в соответствии с делом, имя студента будет изменено на "Генри Джексон" .

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

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

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

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

Шаг-01 :

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

 Sub Checkstring() 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 = " " End If Next cell End Sub 

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

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

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

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

➤ Нажмите F5

Результат :

Затем вы получите "Прошел" статус для студентов, сдавших экзамен.

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

Если вы хотите извлечь соответствующие данные для студента с именем "Майкл Джеймс" тогда вы можете следовать этому методу.

Шаг-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 James")> 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 James")> 0 это условие для проверки, если ячейка в столбце B содержит Майкл Джеймс .

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

➤ Нажмите F5

Результат :

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

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

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

Заключение

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

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