行号的两列匹配

Two-column match for row number

我一直在使用强力代码行进行两列匹配,看起来像这样:

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 列上是非唯一的,变量 project_name 在第 3 列上也是非唯一的。但是当它们在同一行时是 'matched'。数据集可能是这样的:

例如,我想匹配 john smith,return 值将是 table 第 3 行或第 4 行。但显然,数据集将是更大了,我将不得不从同一行的其他列中提取一些数据,例如,john smith 的工作经历等。

我最近接触了一些数组知识(谢谢你拉尔夫!)并正在考虑这样的一个:

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

我只是想知道你们这些专家中哪一个可能更快,或者您可能有任何个人建议!非常感谢您的宝贵时间。

您可以调整以下内容以获得有用的东西...

Dim FullName As String: FullName = "John Smith"

Dim tbl As ListObject: Set tbl = ActiveSheet.ListObjects("Table1")
Dim SearchArr() As String: SearchArr = Split(FullName, " ")

Application.Goto tbl
With tbl
    .Range.AutoFilter Field:=1, Criteria1:=SearchArr(0)
    .Range.AutoFilter Field:=2, Criteria1:=SearchArr(1)
    Dim Rng As Range: Set Rng = tbl.DataBodyRange.SpecialCells(xlCellTypeVisible)
    .Range.AutoFilter Field:=1
    .Range.AutoFilter Field:=2
End With