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