VBA (Excel): Znajdź na podstawie wielu kryteriów wyszukiwania bez pętli
Mam duży arkusz danych, który chcę przeszukać w VBA na podstawie 3 zestawów kryteriów. Można założyć, że każdy wpis wiersza jest unikalny. Format samego arkusza / danych nie może zostać zmieniony ze względu na wymagania. (Widziałem kilka postów dotyczących pytań pokrewnych, ale nie znalazłem jeszcze odpowiedniego rozwiązania.)
Na początku użyłem klasycznego VBAodnaleźć metoda w pętli:
Set foundItem = itemRange.Find(What:=itemName, Lookin:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows)
If Not foundItem Is Nothing Then
firstMatchAddr = foundItem.Address
Do
' *Check the other fields in this row for a match and exit if found*
Set foundItem = itemRange.FindNext(foundItem)
Loop While foundItem.Address <> firstMatchAddr And Not foundItem Is Nothing
End If
Ale ponieważ trzeba to nazywać wiele razy na dużych zestawach danych, szybkość tego nie była dobra.
Zrobiłem kilka poszukiwań i odkryłem, że mogę użyćmecz metoda zindeks. Tak więc bezskutecznie próbowałem wielu odmian takich jak:
result = Evaluate("=MATCH(1, (""" & criteria1Name & """=A2:A" & lastRow & ")*(""" & criteria2Name & """=B2:B" & lastRow & ")*(""" & criteria3Name & """=C2:C" & lastRow & "), 0)")
I
result = Application.WorksheetFunction.Index(resultRange, Application.WorksheetFunction.Match((criteria1Name = criteria1Range)*(criteria2Name = criteria2Range)*(criteria3Name = criteria3Range))
I
result = Application.WorksheetFunction.Index(resultRange, Application.WorksheetFunction.Match((criteria1Range=criteria1Name )*(criteria2Range=criteria2Name )*(criteria3Range=criteria3Name ))
Potem spróbowałem użyćAutoFilter sortować:
.Range(.Cells(1,1), .Cells(lastRow, lastCol)).AutoFilter Field:=1, Criteria1:="=" & criteria1Name
.Range(.Cells(1,1), .Cells(lastRow, lastCol)).AutoFilter Field:=2, Criteria1:="=" & criteria2Name
.Range(.Cells(1,1), .Cells(lastRow, lastCol)).AutoFilter Field:=3, Criteria1:="=" & criteria3Name
Ale ponieważ jedna z kolumn sortujących zawiera daty, miałem problemy z poprawnym działaniem AutoFiltera.
Moje pytanie brzmi,jak mogę przeszukiwać kolumny w Excel VBA na podstawie wielu kryteriów,bez zapętlania, zwracając numer wiersza lub wartość w komórce tego wiersza, który mnie interesuje?