因此,在Excel中,我们知道可以通过连接来测试多个条件,如下所示:
MATCH(criteria1&criteria2, Range(), 0)
其中criteria1
和criteria2
是两个不同的标准。
我试图在Excel VBA中自动执行此操作,如下所示:
WorksheetFunction.Match(criteria1 + "&" + criteria2, Range(), 0)
我的问题是,如何以VBA形式复制与&符号相同的标准串联?在上面的版本中,Excel一直告诉我它不能使用WorkSheetFunction类的Match函数,我将其归因于上面的失败级联尝试。任何建议或意见将不胜感激。
哦,这里有关于在MATCH()
中使用多个条件的Microsoft知识库文章的链接:http://support.microsoft.com/kb/59482
编辑:我意识到我并没有将2个范围与我的2个标准相对应。问题是我不知道如何连接2个范围,因为我的形式是:
Range(Cells(1,columnIndex),Cells(rowCount,columnIndex))
而不是A1:A200
。关于如何转换或以当前形式连续范围的任何想法?
答案 0 :(得分:1)
这有效:
Sub dural()
crit1 = "find "
crit2 = "happiness"
N = Application.WorksheetFunction.Match(crit1 & crit2, Range("A1:A10"), 0)
MsgBox N
End Sub
用 A3 包含:
找到快乐
修改#1:强>
考虑多个列中的多个条件的情况。例如:
我们希望 VBA 检索小黑狗的名称
在工作表单元格中没有 VBA ,我们可以使用:
=INDEX(D1:D100,SUMPRODUCT(--(A1:A100="dog")*(B1:B100="small")*(C1:C100="black")*ROW(1:100)),1)
获取名称 Oscar
我们可以在 VBA
中使用相同的公式Sub luxation()
Dim s As String, s2 As String
s = "INDEX(D1:D100,SUMPRODUCT(--(A1:A100=""dog"")*(B1:B100=""small"")*(C1:C100=""black"")*ROW(1:100)),1)"
s2 = Evaluate(s)
MsgBox s2
End Sub
答案 1 :(得分:1)
不容易映射到VBA实现,但您可以使用Evaluate作弊:
Sub Tester()
Dim v1, v2, f
v1 = "y"
v2 = 11
Sheet1.Names.Add Name:="X", RefersTo:=v1
Sheet1.Names.Add Name:="Y", RefersTo:=v2
f = "MATCH(X&Y,$A$2:$A$5&$B$2:$B$5, 0)"
Debug.Print Sheet1.Evaluate(f)
End Sub
或跳过名称:
Sub Tester2()
Const F_TEMPL As String = "MATCH(""{V1}""&""{V2}"",$A$2:$A$5&$B$2:$B$5, 0)"
Dim v1, v2, f
f = Replace(F_TEMPL, "{V1}", "x")
f = Replace(f, "{V2}", 12)
Debug.Print Sheet1.Evaluate(f)
End Sub
答案 2 :(得分:0)
您仍然需要将MATCH
参数体发送为字符串。 '+'不会连接。
WorksheetFunction.Match(criteria1 & "&" & criteria2, Range(), 0)
应该连接两个值并执行匹配。