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 e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

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