使用多个条件在工作表中查找行

时间:2015-02-23 16:23:26

标签: excel vba excel-vba

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

COLUMN_A     COLUMN_B      COLUMN_C

 david         jane         john
 michael       jenny        kelly
 david         sarah        peter
 leo           kelly        peter

我想通过指定父亲,母亲和孩子的名字来找到记录。

我想在每一栏上做一个.Find,但我不知道怎么做,也不知道是否有更好的现成解决方案来搜索这样的记录。

3 个答案:

答案 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

稍微简单一些

代码假设你的布局是这样的:

enter image description here

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,您可以根据代码进行更改。

enter image description here

答案 2 :(得分:0)

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

=INDEX(C:C,SUMPRODUCT((A:A="david")*(B:B="jane")*ROW(C:C)),0)

代替&#34;大卫&#34;和&#34; jane&#34;如果需要,可以进行细胞参考。