VBA 2标准索引匹配查找使用评估、Excel
假设我正在尝试使用以下示例图片中的2个条件进行查找: 谁能告诉我这个代码有什么问题吗?我尝试使用具有2个条件的索引/匹配查找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")
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
其中一个答案对你有用吗?如果是,请将其标记为正确。单击所用答案旁边的绿色复选标记。这是只有你才能做的事。它将把这个问题标记为已被回答。