У меня есть большой лист данных, который я хочу найти в VBA на основе 3 наборов критериев. Каждая запись строки может считаться уникальной. Формат самого листа/данных не может быть изменен из-за требований. (Я видел несколько сообщений о связанных с этим вопросов, но не нашли рабочее решение для этого еще.)VBA (Excel): Найти на основе нескольких критериев поиска без петли
Сначала я использовал классический метод VBA find в цикле:
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
Но так как это нужно называть несколько раз на больших наборах данных, скорость которой не была хорошей.
Я искал и обнаружил, что могу использовать метод match с index. Поэтому я безуспешно пытался много вариантов, что такие, как:
result = Evaluate("=MATCH(1, (""" & criteria1Name & """=A2:A" & lastRow & ")*(""" & criteria2Name & """=B2:B" & lastRow & ")*(""" & criteria3Name & """=C2:C" & lastRow & "), 0)")
И
result = Application.WorksheetFunction.Index(resultRange, Application.WorksheetFunction.Match((criteria1Name = criteria1Range)*(criteria2Name = criteria2Range)*(criteria3Name = criteria3Range))
И
result = Application.WorksheetFunction.Index(resultRange, Application.WorksheetFunction.Match((criteria1Range=criteria1Name)*(criteria2Range=criteria2Name)*(criteria3Range=criteria3Name))
Затем я попытался с помощью AutoFilter сортировать:
.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
Но потому что один из сортировка столбцов содержит даты, у меня были проблемы с тем, чтобы AutoFilter работал правильно.
Мой вопрос, как я могу искать через столбцы в Excel VBA на основе нескольких критериев, без зацикливания, возвращая либо номер строки или значение в ячейке этой строки, что я заинтересован в?
Почему вы против зацикливания? Сколько строк вы говорите? – Graphth
Что вы делали с возвращенными результатами? – brettdj