我有一张这样的表:
每行是3个成员家庭记录,每列包含家庭成员的姓名(父亲,母亲,孩子)
COLUMN_A COLUMN_B COLUMN_C
david jane john
michael jenny kelly
david sarah peter
leo kelly peter
我想通过指定父亲,母亲和孩子的名字来找到记录。
我想在每一栏上做一个.Find,但我不知道怎么做,也不知道是否有更好的现成解决方案来搜索这样的记录。
答案 0 :(得分:0)
我过去使用的一种方法是将每个族组合添加到公开声明的字典对象中。添加后,后续子例程可以在Dictionary对象中搜索匹配项,然后与该行进行交互。
请参阅下面的代码,如果您能够根据自己的需要做出决定,请告诉我。
Public oDictionary As Object
Public Sub CreateEntryList()
Dim rngToAdd As Range
Dim strKey As String
Set rngToAdd = Sheet1.Range("A2:A5")
Set oDictionary = CreateObject("Scripting.Dictionary")
For Each cel In rngToAdd
strKey = cel.Value & cel.Offset(, 1).Value & cel.Offset(, 2).Value
If Not oDictionary.exists(strKey) Then
oDictionary.Add strKey, cel.Row
End If
Next cel
End Sub
Sub InteractWithFoundrow()
Dim strSearch As String
strSearch = Range("A3") & Range("B3") & Range("C3")
If oDictionary.exists(strSearch) Then
Rows(oDictionary(strSearch)).Interior.Color = vbRed
Else
MsgBox ("Error: Doesn't exist")
End If
End Sub
答案 1 :(得分:0)
更新:感谢@ user3561813,他告诉我代码中的问题。我已相应更新。它可能不是很专业,但它会完成这项工作。
下面的代码比@ user3561813
稍微简单一些代码假设你的布局是这样的:
Sub rowvscol()
Dim Father As String
Dim Mother As String
Dim Children As String
Dim rng As Range
Dim LastRow As Long
Father = Range("F2").Value
Mother = Range("G2").Value
Children = Range("H2").Value
LastRow = Range("B" & Rows.Count).End(xlUp).Row
i = 1
While i <= LastRow
With Range("B" & i & ":B" & LastRow) '<- Father Column
Set rng = .Find(What:=Father, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not rng Is Nothing And rng.Offset(0, 1).Value = Mother And rng.Offset(0, 2).Value = Children Then
MsgBox rng.Row
Exit Sub
End If
End With
i = i + 1
Wend
MsgBox "No match"
End Sub
因此,它会弹出一个msgbox,您可以根据代码进行更改。
答案 2 :(得分:0)
您也可以使用以下公式在没有VBA的情况下执行此操作:
=INDEX(C:C,SUMPRODUCT((A:A="david")*(B:B="jane")*ROW(C:C)),0)
代替&#34;大卫&#34;和&#34; jane&#34;如果需要,可以进行细胞参考。