在一张表中find一行,感谢vba中的多个标准

我有一个这样的表格:每行是一个3成员家庭logging,每列包含家庭成员(父亲,母亲,孩子)的名字,

COLUMN_A COLUMN_B COLUMN_C david jane john michael jenny kelly david sarah peter leo kelly peter 

我可以通过指定父亲,母亲和孩子的名字来查找logging。 我正在考虑在每一列上查找,但我不知道该怎么做,也不知道是否没有更好的解决scheme来search这样的logging。

我是一个vba的初学者,所以我有很多麻烦。

过去我使用的一种方法是将每个家庭组合添加到公开声明的字典对象中。 一旦添加,后续的子程序就可以searchDictionary对象进行匹配,然后与该行进行交互。

看下面的代码,让我知道如果你能弄清楚/适应你的需要。

 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 

您也可以使用以下公式在不使用VBA的情况下执行此操作:

 =INDEX(C:C,SUMPRODUCT((A:A="david")*(B:B="jane")*ROW(C:C)),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 

因此,它popup一个msgbox,你可以改变你的代码。

在这里输入图像说明