Я использую грубую силу строку коды делает матч на две колонок, глядя что-то вроде этого:матча Две колонок для строки числа
For K = 1 To TPrice.ListRows.Count
If TPrice.DataBodyRange(K, 2).Value = str3 And TPrice.DataBodyRange(K, 3).Value = project_name Then
r = K + 2
Exit For
End If
Next K
Если переменная str3 не является уникальной на колонке 2, а переменная имя_проекта также не является уникальной в столбце 3. Но «сопоставляются», когда они находятся в одной строке. Набор данных может быть что-то вроде:
, где я хотел бы, чтобы соответствовать Джону Смиту, например, и возвращаемое значение будет строка таблицы 3, или номер строки 4. Но очевидно, что набор данных будет намного больше, и мне придется выложить некоторые данные из других столбцов в том же ряду, например, историю занятости Джона Смита и т. д.
Я недавно был ознакомлен с некоторыми знаниями в массиве (Thank вы Ральф!) и созерцая такой вид:
Public Sub Finding_John_Smith()
Dim vArr As Variant
Dim lCount As Long
Dim V As Long
vArr = ThisWorkbook.Worksheets("names").ListObjects(1).DataBodyRange.Value2
For lCount = LBound(vArr) To UBound(vArr)
Select Case vArr(lCount, 1)
Case "john"
If vArr(lCount, 2) = "Smith" Then
MsgBox "you found a match!"
V = lCount
End If
Case Else
MsgBox "name cannot be found!"
End Select
Next lCount
End Sub
Мне просто интересно, среди вас эксперты, которые могут быть быстрее или какие-либо личные рекомендации, которые у вас могут быть! Большое вам спасибо за ваше время.
Я никогда не видел хороший ответ на «что быстрее» вопросы? Почему бы не разобрать два куска кода? Для подхода грубой силы я ожидал бы, что массивы будут быстрее, чем рабочие листы. Однако использование преимуществ Excel может быть более быстрым. Почему бы не использовать 'Find' для поиска столбца 2 для каждого вхождения' str3', а затем проверить столбец 3 для 'project_name'. Справка для 'Find' показывает, как использовать его в цикле. 'AutoFilter' также может дать хорошие результаты. –