Szukanie wartości za pomocą funkcji Match

Niedawno kolega poprosił mnie, abym pomógł mu w aktualizacji kodu w ważnym dla niego pliku. Podczas pisania kodu chciałem użyć wbudowanego w Excel narzędzia tj. SZUKAJ (Ctrl+F), aby odnaleźć interesujący mnie rekord, jednakże wyszukiwanie nie było prawidłowe pomimo że poszukiwana wartość była w arkuszu.

Powodem tego, że narzędzie SZUKAJ nie znajdowało wartości był to, że była ona wynikiem funkcji:

Narzędzie SZUKAJ nie znalazło wartości

Nie chciałem używać – a nawet nie mogłem użyć – pętli, aby znaleźć rekord. Powodem rezygnacji z pętli była ilość wierszy do przeszukania czyli ok. 1000 oraz fakt, że te 1000 wierszy miało być przeszukane 8 razy podczas jednego wykonania kodu. Taki kod bardzo spowolniłby wykonanie kodu.

Z pomocą przyszedł internet, krótkie poszukiwanie pozwoliło mi znaleźć satysfakcjonujące rozwiązanie w postaci funkcji Match, która zwróciła mi numer wiersza w którym poszukiwany rekord się znajdował.

Źródło:
https://stackoverflow.com/questions/44159529/application-match-in-vba
https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheetfunction-match-method-excel
https://www.extendoffice.com/documents/excel/2444-excel-vlookup-get-row-number.html

Sub test()
' Zwracanie numeru wiersza poszukiwanego rekordu
' Funkcja Match zwraca pierwszy znaleziony rekord
' Numer kolumny jest ustalony

Dim Var 

With ThisWorkbook.Sheets("SheetName")
    If Not IsError(Application.Match("ItemName", .Columns(2), 0)) Then
        Var = Application.Match("ItemName", .Columns(2), 0)     

        If Var <> "" Then
            Debug.Print "Record has not been found"
        Else
            Debug.Print Var
        End If
    End If
End With
End Sub

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.