VBA 2标准索引匹配查找使用评估、Excel

VBA 2标准索引匹配查找使用评估、Excel,vba,excel,Vba,Excel,假设我正在尝试使用以下示例图片中的2个条件进行查找: 谁能告诉我这个代码有什么问题吗?我尝试使用具有2个条件的索引/匹配查找 Sub test() Dim imTest As Variant Dim school As String Dim place As String Dim Criteria1 As String Dim Criteria2 As String Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1")

假设我正在尝试使用以下示例图片中的2个条件进行查找:

谁能告诉我这个代码有什么问题吗?我尝试使用具有2个条件的索引/匹配查找

Sub test()
Dim imTest As Variant
Dim school As String
Dim place As String
Dim Criteria1 As String
Dim Criteria2 As String

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

school = ws.Cells(2, 8)
place = ws.Cells(2, 9)
Criteria1 = school
Criteria2 = place

'error here
imTest = Evaluate("Index($c$2:$c$5, Match( criteria1  & criteria2 , $A$2:$A$5&$B$2:$B$5, 0))")
If IsError(imTest) Then
ws.Cells(2, 10) = "Err"
Else
ws.Cells(2, 10) = imTest
End If

End Sub
但是,此代码可以通过如下方式编辑求值行来工作:

Sub test()
Dim imTest As Variant
Dim school As String
Dim place As String
Dim Criteria1 As String
Dim Criteria2 As String

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

school = ws.Cells(2, 8)
place = ws.Cells(2, 9)
Criteria1 = school
Criteria2 = place

'this changed and no more error
imTest = Evaluate("Index($c$2:$c$5, Match( ""John""  & ""NJ"" , $A$2:$A$5&$B$2:$B$5, 0))")
If IsError(imTest) Then
ws.Cells(2, 10) = "Err"
Else
ws.Cells(2, 10) = imTest
End If

End Sub
我需要做什么才能使匹配参数对变量起作用?我希望我没有太困惑。提前非常感谢您的帮助!谢谢

试试这个:

imTest = ws.Evaluate("Index($c$2:$c$5, Match(" & criteria1  & criteria2 & " , $A$2:$A$5&$B$2:$B$5, 0))")

您需要从属于公式的零件中引用vba零件,这应该有效。注意:使用
应用程序。评估
工作表。评估
之间有区别:第一个将在任何一张工作表恰好处于活动状态的上下文中评估公式。如果这不是您想要的,那么您应该使用工作表版本

Sub test()

    Dim imTest As Variant
    Dim school As String
    Dim place As String
    Dim Criteria1 As String
    Dim Criteria2 As String

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    school = ws.Cells(2, 8)
    place = ws.Cells(2, 9)
    Criteria1 = school
    Criteria2 = place

    'note ws.Evaluate or you will get bad results when 
    '   Sheet1 is not the active sheet
    imTest = ws.Evaluate("Index($c$2:$c$5, Match(""" &  criteria1 & """&""" & _
                          criteria2 & """, $A$2:$A$5&$B$2:$B$5, 0))")

    If IsError(imTest) Then
        ws.Cells(2, 10) = "Err"
    Else
        ws.Cells(2, 10) = imTest
    End If

End Sub

其中一个答案对你有用吗?如果是,请将其标记为正确。单击所用答案旁边的绿色复选标记。这是只有你才能做的事。它将把这个问题标记为已被回答。