将Excel数组公式转换为VBA

时间:2019-02-28 17:02:01

标签: excel vba

我正在制作带有不同事件的日历。 为此,我具有以下公式来查找具有多个条件的多个匹配:

=IFERROR(INDEX(Returnarray, SMALL(IF(Value1 & Value2=Lookuparray1&Lookuparray2, ROW(Returnarray)-MIN(ROW(Returnarray))+1,""), ROW()-Offset)),""))

我想将此公式转换为VBA函数,但无法正常工作。 我尝试了Evaluateappication.worksheetfunction,但没有成功。

Function MultipleLookup(Offset As Integer, ReturnArray As Range, Value1 As Range, Lookuparray1, Value2 As Range, Lookuparray2 As Range)
    MultipleLookup = Evaluate("=IFERROR(INDEX(Returnarray, SMALL(IF(Value1 & Value2=Lookuparray1&Lookuparray2, ROW(Returnarray)-MIN(ROW(Returnarray))+1,""), ROW()-Offset)),""))")
End Function

我还尝试更改公式并使用match代替if,但是它只会给我第一个匹配项。

有人可以帮我使它正常工作吗? 可以使用具有可变数量标准的功能吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您的Evaluate函数现在是一个完整的字符串,并且不使用变量。尝试这样的事情:

MultipleLookup = Evaluate("=IFERROR(INDEX(" & Returnarray.Address & ", SMALL(IF(" & Value1.Address & " & " & Value2.Address & "=" & Lookuparray1.Address & "&" & Lookuparray2.Address & ", ROW(" & Returnarray.Address & ")-MIN(ROW(" & Returnarray.Address & "))+1,""), ROW()-" & Offset & ")),""))")