在Excel VBA中控制多个MATCH条件
所以在Excel中,我们知道可以通过串联来testing多个条件,如下所示:
MATCH(criteria1&criteria2, Range(), 0)
其中criteria1
和criteria2
2是2个独立的标准。
我试图在Excel VBA中自动化这个东西,就像这样:
WorksheetFunction.Match(criteria1 + "&" + criteria2, Range(), 0)
我的问题是,如何在VBA表单中复制与&符号相同的连接条件? 在上面的版本中,Excel不停地告诉我它不能使用WorkSheetFunction类的Match函数,我将这个函数归因于上面失败的级联尝试。 任何build议或意见,将不胜感激。
噢,这里有一个关于在MATCH()
使用多个条件的Microsoft知识库文章的链接: http : //support.microsoft.com/kb/59482
编辑:我意识到我没有把2范围对应我的2条件。 问题是我不知道如何连接2个范围,因为我的forms是:
Range(Cells(1,columnIndex),Cells(rowCount,columnIndex))
而不是A1:A200
。 任何想法如何转换,或连接目前forms的范围?
这工作:
Sub dural() crit1 = "find " crit2 = "happiness" N = Application.WorksheetFunction.Match(crit1 & crit2, Range("A1:A10"), 0) MsgBox N End Sub
与,说A3包含:
find快乐
编辑#1:
考虑几个列中的多个标准的情况。 例如:
我们希望VBA检索一个小黑狗的名字
没有工作表单元格中的VBA ,我们可以使用:
=INDEX(D1:D100,SUMPRODUCT(--(A1:A100="dog")*(B1:B100="small")*(C1:C100="black")*ROW(1:100)),1)
得到奥斯卡的名字
我们可以在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
不容易映射到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
您仍然需要将MATCH
参数主体作为string发送。 “+”不连接。
WorksheetFunction.Match(criteria1 & "&" & criteria2, Range(), 0)
应连接两个值并执行匹配。