Excel VBA-从多个条件中查找行

Excel VBA-从多个条件中查找行,excel,vba,Excel,Vba,我以前也走过这条路。匹配函数在我使用单个标准时起作用,但我无法使用两个标准正确使用它 我目前的程序是在NR_Qualtrics页面上查找CaseID和电子邮件上的匹配项。因为这些列可以根据我得到的每个文档而有所不同,所以我有一个过程来标识行并返回CaseID和Email所在的范围 我在这个函数中要做的下一件事是遍历非居民表中的每一行,试图在CaseID和Email上找到匹配项。我需要函数返回找到匹配的行,并在列O中报告。目前,我仍然无法找到匹配的列。调试时,我不断收到错误2015和错误2029。

我以前也走过这条路。匹配函数在我使用单个标准时起作用,但我无法使用两个标准正确使用它

我目前的程序是在NR_Qualtrics页面上查找CaseID和电子邮件上的匹配项。因为这些列可以根据我得到的每个文档而有所不同,所以我有一个过程来标识行并返回CaseID和Email所在的范围

我在这个函数中要做的下一件事是遍历非居民表中的每一行,试图在CaseID和Email上找到匹配项。我需要函数返回找到匹配的行,并在列O中报告。目前,我仍然无法找到匹配的列。调试时,我不断收到错误2015和错误2029。当我手动查看时,我确信匹配项是存在的。我不确定我的程序哪里做错了。你能帮忙吗

Sub NonResFindMultipleProviders()
    'This function finds any duplicate Case IDs for NR providers where they had surveys
    'This function needs to run before NonRes_ChkSurveyRcd
    'If there are duplicates, it will indicate that in the Notes Column (N)
    'If a duplicate exists, then it must match on Email and CaseID and show the value of Yes-NR_Qualtrics Row XX/No in Survey Recieved (Column O)
    Application.ScreenUpdating = False

    Dim r, lastRow, rowMatch As Long
    Dim colCaseID, colEmail, colResponseID As Long
    Dim rngCaseID, rngEmail, rngResponseID As Range
    Dim valEmail, valCaseID As String
    Dim result As Variant
    Dim shtNR As Worksheet
    Dim shtQNR As Worksheet

    Sheets("NonResidential").Select
    lastRow = getLastRow

    Range("A2").Select

    Set shtNR = ThisWorkbook.Sheets("NonResidential")
    Set shtQNR = ThisWorkbook.Sheets("NR_Qualtrics")

    colCaseID = FindColHeaderWText("NR_Qualtrics", "ExternalDataReference")
    Set rngCaseID = Worksheets("NR_Qualtrics").Columns(colCaseID)
    colEmail = FindColHeaderWText("NR_Qualtrics", "EmailAddress")
    Set rngEmail = Worksheets("NR_Qualtrics").Columns(colEmail)
    'colResponseID = FindColHeaderWText("NR_Qualtrics", "ResponseID")
    'Set rngResponseID = Worksheets("NR_Qualtrics").Columns(colResponseID)

    'The Notes field(column N) shows the duplicates.  Find matches on CaseID AND Email
    ''Not (IsError(Application.Match(Cells(r, 1).Value, rng, 0))) And
    For r = 2 To lastRow
        valCaseID = Cells(r, 1).Value   'Column A (1) has CaseIDs
        valEmail = Cells(r, 12).Value   'Column L (12) has emails

        result = shtNR.Evaluate("MATCH(" & valCaseID & "&" & valEmail & ",rngCaseID&rngEmail,0)")
        If (Not IsError(result)) Then    'Mark only if Notes - Column N (13) is marked with a duplicate - Need to put this in next.  RN, just evaluate everything
            Cells(r, 15).Value = "Yes"  'Column O (14) Survey Recieved marked with Yes
        End If
    Next r

    'Cleanup - Remove the words duplicate
    'Columns("N:N").Select
    'Selection.Replace What:="Duplicate", Replacement:="", LookAt:=xlWhole, _
    '    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    '    ReplaceFormat:=False

    Application.ScreenUpdating = True

End Sub

下面是一个基于3个条件匹配的示例。尝试将您的范围和标准放到以下位置:

Sub MatchMultipleCritera()

    ' Cells containing the values to match
    Dim criteria1 As Range, criteria2 As Range, criteria3 As Range
    Set criteria1 = Range("A1")
    Set criteria2 = Range("B1")
    Set criteria3 = Range("C1")


    ' Ranges containing the values to be checked against the match values above.
    Dim rng1 As Range, rng2 As Range, rng3 As Range
    Set rng1 = Range("Table1[Item]")
    Set rng2 = Range("Table1[Active]")
    Set rng3 = Range("Table1[Quanitity2]")

    MsgBox "Row " & Evaluate("=MATCH(1,(" & criteria1.Address & "=" & rng1.Address & ")*(" & criteria2.Address & "=" & rng2.Address & ")*(" & criteria3.Address & "=" & rng3.Address & "))")
End Sub
在本例中:

单元格A1、B1和C1包含我匹配的值。 我正在查找一个名为Table1的Excel.ListObject表,该表包含Item、Active和Quantity列。 检查rng1是否为标准1中的值,检查rng2是否为标准2中的值,等等。 结果是行号。
这是对使用数组公式的VBA修改。Evaluate函数默认情况下将公式计算为数组公式

哪些行会抛出错误?似乎所有这些都是错误。我将debug.print r放在if语句中,没有得到任何结果。当我将:Debug.Print result&-&r放在if语句的上方,结果之后。我得到一个运行时错误“13”类型不匹配。为什么在result=shtNR.EvaluateMATCH&valCaseID&&valEmail&,rngCaseID&rngEmail,0中rngCaseID和rngEmail在引号中?我认为它们不在引号中。它们应该在引号中吗?它们在引号中,因此不再是变量,而是字符串。谢谢。但当我运行它时,所有找到或未找到的结果都返回:第1048576行