Excel VBA Znajdź następny
Podobnie jak w programie Excel, gdy naciskamy CTRL + F, pojawia się okno kreatora, które pozwala nam przeszukać wartość w danym arkuszu, a po znalezieniu wartości klikamy znajdź obok, aby znaleźć inną podobną wartość, ponieważ jest to funkcja arkusza roboczego, którą można go również używać w VBA jako metody właściwości aplikacji jako application.findnext do tych samych celów.
Znalezienie określonej wartości w wymienionym zakresie jest w porządku, ale co, jeśli wymaganiem jest znalezienie wartości z wieloma wystąpieniami. W jednym z wcześniejszych artykułów omówiliśmy metodę „Znajdź” w języku VBA i nie jest to wcale skomplikowane, ale znalezienie wszystkich powtarzających się wystąpień jest możliwe tylko przy użyciu metody „Znajdź następny” w programie Excel VBA.
W tym artykule pokażemy, jak korzystać z funkcji „Znajdź następny” w programie Excel VBA.
Co to jest Znajdź następny w Excel VBA?
Jak mówi słowo „Znajdź następny”, oznacza to, że ze znalezionej komórki kontynuuj wyszukiwanie następnej wartości, aż wróci do pierwotnej komórki, w której rozpoczęliśmy wyszukiwanie.
Jest to zaawansowana wersja metody „Znajdź”, która wyszukuje tylko raz podaną wartość w podanym zakresie.
Poniżej znajduje się składnia metody ZNAJDŹ NASTĘPNY w Excel VBA.
Po: To jest słowo, którego szukamy.
Przykłady metody Znajdź następny w Excel VBA
Poniżej znajdują się przykłady znalezienia następnej metody w programie Excel VBA.
Na przykład spójrz na poniższe dane.
Możesz pobrać ten szablon VBA Znajdź następny szablon Excel tutaj - VBA Znajdź następny szablon ExcelKrok 1 - W tych danych musimy znaleźć nazwę miasta „Bangalore”. Zacznijmy podprocedurę w edytorze Visual Basic.
Kod:
Sub Range Next_Example () End Sub
Krok # 2 - Najpierw zadeklaruj zmienną jako obiekt „Zakres”.
Kod:
Sub Range Next_Example () Dim Rng As Range End Sub
Krok # 3 - Ustaw odniesienie dla zmiennej obiektu jako „Zakres („ A2: A11 ”).
Kod:
Pod zakresNext_Example () Dim Rng As Range Set Rng = Range ("A2: A12") End Sub
Ponieważ nasze dane listy miast znajdują się w zakresie komórek od A2 do A11, tylko w tym zakresie będziemy szukać miasta „Bangalore”.
Ponieważ ustawiamy odniesienie do zakresu na zmienną „Rng”, używamy tej zmiennej zamiast używania RANGE („A2: A11”) za każdym razem.
Krok # 4 - Użyj zmiennej RNG i otwórz metodę Find.
Kod:
Sub RangeNext_Example () Dim Rng As Range Set Rng = Range ("A2: A12") Rng.Find End Sub
Krok # 5 - Pierwszym argumentem metody FIND jest „Co”, czyli to, czego szukamy we wspomnianym zakresie, więc wartością, którą szukamy jest „Bangalore”.
Kod:
Sub RangeNext_Example () Dim Rng As Range Set Rng = Range ("A2: A12") Rng.Find What: = "Bangalore" End Sub
Krok # 6 - Aby pokazać, w której komórce znaleźliśmy tę wartość, zadeklaruj jeszcze jedną zmienną jako ciąg.
Kod:
Sub RangeNext_Example () Dim Rng As Range Dim CellAdderess As String Set Rng = Range ("A2: A12") Rng.Find What: = "Bangalore" End Sub
Krok # 7 - W przypadku tej zmiennej przypisz znaleziony adres komórki.
Kod:
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 SubUwaga: RNG.Address, ponieważ RNG będzie mieć odwołanie do znalezionej komórki wartości.
Krok # 8 - Teraz pokaż przypisaną zmienną adresu komórki w oknie komunikatu w 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 Pod
Krok # 9 - Uruchom kod i zobacz, co tu otrzymamy.
Znaleźliśmy więc wartość „Bangalore” w komórce A5. Dzięki metodzie Find możemy znaleźć tylko jedną komórkę, więc zamiast FIND musimy użyć funkcji FIND NEXT w Excel VBA.
Krok # 10 - Musimy odwołać się do zmiennej obiektu zakresu, ale przy użyciu metody ZNAJDŹ NASTĘPNY w programie Excel VBA.
Kod:
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
Jak widać powyżej, użyliśmy metody VBA FIND NEXT, ale wewnątrz funkcji użyliśmy nazwy zmiennej obiektu zakresu.
Krok # 11 - Teraz ponownie przypisz adres komórki i pokaż adres w oknie wiadomości.
Kod:
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
Krok # 12 - Uruchom makro i zobacz, co otrzymamy w pierwszym oknie komunikatu.
Krok # 13 - Pierwsze okno komunikatu pokazuje wartość „Bangalore” znalezioną w komórce A5, kliknij przycisk OK, aby zobaczyć następną znalezioną wartość.
Druga wartość znaleziona w komórce A7, naciśnij Ok, aby kontynuować.
VBA Znajdź następny (za pomocą pętli)
Opuści podprocedurę VBA, ale w komórce A10 znajdujemy się jeszcze jeden. Jeśli wartości znajdują się w więcej niż jednej komórce, lepszym pomysłem jest użycie pętli.
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.