行号的两列匹配
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
我一直在使用强力代码行进行两列匹配,看起来像这样:
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