Excel VBA Найти далее
Как и в Excel, когда мы нажимаем CTRL + F, появляется окно мастера, которое позволяет нам искать значение на заданном листе, и как только значение найдено, мы нажимаем «Найти рядом», чтобы найти другое аналогичное значение, так как это функция рабочего листа, которую мы также можно использовать его в VBA как метод свойства Application как application.findnext для тех же целей.
Найти конкретное значение в указанном диапазоне - это нормально, но что, если требуется найти значение с несколькими вхождениями. В одной из предыдущих статей мы обсуждали метод «Найти» в VBA, и он совсем несложный, но найти все повторяющиеся вхождения можно только с помощью метода «Найти следующее» в Excel VBA.
В этой статье мы покажем вам, как использовать эту функцию «Найти далее» в Excel VBA.
Что такое «Найти дальше» в Excel VBA?
Как говорится в слове, «Найти далее» означает, что из найденной ячейки продолжать поиск следующего значения до тех пор, пока не вернется в исходную ячейку, с которой мы начали поиск.
Это расширенная версия метода «Найти», который выполняет поиск указанного значения в указанном диапазоне только один раз.
Ниже приведен синтаксис метода НАЙТИ СЛЕДУЮЩИЙ в Excel VBA.
После: это слово, которое мы ищем.
Примеры метода поиска следующего в Excel VBA
Ниже приведены примеры метода поиска следующего в Excel VBA.
Например, посмотрите на данные ниже.
Вы можете скачать этот шаблон VBA Find Next Excel здесь - VBA Find Next Excel TemplateШаг № 1 - В этих данных нам нужно найти название города «Бангалор». Начнем подпроцедуру в редакторе Visual Basic.
Код:
Sub RangeNext_Example () End Sub
Шаг № 2 - Сначала объявите переменную как объект «Диапазон».
Код:
Sub RangeNext_Example () Dim Rng As End Sub
Шаг № 3 - Установите ссылку для объектной переменной как «Диапазон (« A2: A11 »).
Код:
Sub RangeNext_Example () Dim Rng As Range Set Rng = Range ("A2: A12") End Sub
Так как наши данные списка городов находятся в диапазоне ячеек от A2 до A11, только в этом диапазоне мы будем искать город «Бангалор».
Поскольку мы устанавливаем ссылку на диапазон для переменной «Rng», мы используем эту переменную вместо использования RANGE («A2: A11») каждый раз.
Шаг №4 - Используйте переменную RNG и откройте метод поиска.
Код:
Sub RangeNext_Example () Dim Rng As Range Set Rng = Range ("A2: A12") Rng.Find End Sub
Шаг № 5 - Первый аргумент метода НАЙТИ - «Что», то есть то, что мы пытаемся искать в указанном диапазоне, поэтому ищем значение «Бангалор».
Код:
Sub RangeNext_Example () Dim Rng As Range Set Rng = Range ("A2: A12") Rng.Find What: = "Bangalore" End Sub
Шаг № 6 - Чтобы показать, в какой ячейке мы нашли это значение, объявите еще одну переменную в виде строки.
Код:
Sub RangeNext_Example () Dim Rng As Range Dim CellAdderess As String Set Rng = Range ("A2: A12") Rng.Find What: = "Bangalore" End Sub
Шаг № 7 - Для этой переменной присвойте адрес найденной ячейки.
Код:
Sub RangeNext_Example () Dim Rng As Range Dim CellAdderess As String Set Rng = Range ("A2: A12"). Find (What: = "Bangalore") Rng.Find What: = "Bangalore" CellAddress = Rng.Address End SubПримечание: RNG.Address, потому что RNG будет иметь ссылку для найденной ячейки значения.
Шаг № 8 - Теперь покажите результат назначенной переменной адреса ячейки в окне сообщения в VBA.
Sub RangeNext_Example () Dim Rng As Range Dim CellAdderess As String Set Rng = Range ("A2: A12"). Find (What: = "Bangalore") Rng.Find What: = "Bangalore" CellAddress = Rng.Address MsgBox CellAddress End Sub
Шаг № 9 - Запустите код и посмотрите, что мы получим.
So we have found the value “Bangalore” in the cell A5. With the Find method, we can find only one cell so instead of FIND we need to use FIND NEXT in excel VBA.
Step#10 – We need to reference the range object variable but by using the FIND NEXT method in excel VBA.
Code:
Sub RangeNext_Example() Dim Rng As Range Dim CellAdderess As String Set Rng = Range("A2:A12").Find(What:="Bangalore") Rng.Find What:="Bangalore" CellAddress = Rng.Address MsgBox CellAddress Set Rng = Range("A2:A12").FindNext(Rng) End Sub
As you can see above we have used the VBA FIND NEXT method but inside the function, we have used a range object variable name.
Step#11 – Now again assign the cell address and show the address in the message box.
Code:
Sub RangeNext_Example() Dim Rng As Range Dim CellAdderess As String Set Rng = Range("A2:A12").Find(What:="Bangalore") Rng.Find What:="Bangalore" CellAddress = Rng.Address MsgBox CellAddress Set Rng = Range("A2:A12").FindNext(Rng) CellAddress = Rng.Address MsgBox CellAddress End Sub
Step#12 – Run the macro and see what we get in the first message box.
Step#13 – The first message box shows the value “Bangalore” found in the cell A5, click on the Ok button to see the next found value.
The second value found in A7 cell, press Ok to continue.
VBA Find Next (Using Loop)
It will exit the VBA subprocedure but we are one more to be found in cell A10. When the values are to be found in more than one cell then it is a better idea to use loops.
In this case, too we have value “Bangalore” in more than one cell, so we need to include loops here.
Step#14 – First, declare two variables as the range.
Code:
Sub RangeNext_Example1() Dim Rng As Range Dim FindRng As Range End Sub
Step#15 – Set the reference for the first variable as shown below.
Code:
Sub RangeNext_Example1() Dim Rng As Range Dim FindRng As Range Set Rng = Range("A2:A11").Find(What:="Bangalore") End Sub
Step#16 – For the second variable set the reference by using the FIND VBA function.
Sub RangeNext_Example1() Dim Rng As Range Dim FindRng As Range Set Rng = Range("A2:A11").Find(What:="Bangalore") Set FindRng = Rng.FindNext("Bangalore") End Sub
Step#17 – Before we start searching for the value we need to identify from which cell we are starting the search, for that declares the variable as a string.
Code:
Sub RangeNext_Example1() Dim Rng As Range Dim FindRng As Range Set Rng = Range("A2:A11").Find(What:="Bangalore") Set FindRng = Rng.FindNext("Bangalore") Dim FirstCell As String FirstCell = Rng.Address End Sub
Step#18 – For this variable assign the first cell address.
Code:
Sub RangeNext_Example1() Dim Rng As Range Dim FindRng As Range Set Rng = Range("A2:A11") Set FindRng = Rng.Find(What:="Bangalore") Dim FirstCell As String FirstCell = Rng.Address End Sub
Step#19 – Now we need to include the “Do While” loop to loop through all the cells and find the searching value.
Code:
Sub RangeNext_Example1() Dim Rng As Range Dim FindRng As Range Set Rng = Range("A2:A11").Find(What:="Bangalore") Set FindRng = Rng.FindNext("Bangalore") Dim FirstCell As String FirstCell = Rng.Address Do Loop While FirstCell Cell.Address End Sub
Inside the loop mention the message box and VBA FIND NEXT method.
Step#20 – Below is the complete code for you.
Code:
Sub FindNext_Example() Dim FindValue As String FindValue = "Bangalore" Dim Rng As Range Set Rng = Range("A2:A11") Dim FindRng As Range Set FindRng = Rng.Find(What:=FindValue) Dim FirstCell As String FirstCell = FindRng.Address Do MsgBox FindRng.Address Set FindRng = Rng.FindNext(FindRng) Loop While FirstCell FindRng.Address MsgBox "Search is over" End Sub
Step#21 – This will keep showing all the matching cell address and in the end, it will show the message as “Search is Over” in the new message box.
Things to Remember
- FIND method can find only one value at a time.
- FIND NEXT in excel VBA can find the next value from the already found value cell.
- Use Do While loop to loop through all the cells in the range.