在Excel VBA中控制多个MATCH条件

所以在Excel中,我们知道可以通过串联来testing多个条件,如下所示:

MATCH(criteria1&criteria2, Range(), 0) 

其中criteria1criteria2 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) 

应连接两个值并执行匹配。