Оглавление
Если вы ищете несколько самых простых способов найти точное совпадение с помощью VBA Тогда эта статья будет вам полезна. Итак, давайте приступим к статье и познакомимся со способами поиска точного совпадения.
Скачать рабочую тетрадь
VBA Найти точное соответствие.xlsm5 способов найти точное совпадение с помощью 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 Если у вас есть какие-либо предложения или вопросы, не стесняйтесь поделиться ими с нами.