在VBA中作为函数的sumproduct

我想看看是否有可能在VBA中创build一个sumproduct函数。 我可以做一个在Excel中完美的工作,看起来像这样:

=SUMPRODUCT(C2:C19,((D2:D19="text1")*12+(D2:D19="text2")*4+(D2:D19="text3")*2)) 

我有2列,目标是将第一列中的一个单元格与一个数字相乘,根据另一列单元格中的不同文本。 这如上所示完成。 然而,当我使用它时,实际上每次都需要一些时间来写,所以我想看看能不能在VBA中做一个可以selectx(第一列)和y(第二列)的函数,结果会在那里。 到目前为止,我已经做了这方面的工作,但一直未能成功:

 Function xxx(x, y) xxx = Application.WorksheetFunction.SumProduct(x, ((y = "text1") * 12 + y = "text2" * 4 + y = "text3" * 2)) End Function 

我不能做任何具体的行和列例如C2:C19的引用,因为它变化很大,所以我只想select第一列(x)和第二列(y)作为范围。 任何build议? 谢谢阅读! 🙂

尝试以下function之一…

 Function xxx(x As Range, y As Range) xxx = Evaluate("SUMPRODUCT(" & x.Address & ",((" & y.Address & "=""text1"")*12+(" & y.Address & "=""text2"")*4+(" & y.Address & "=""text3"")*2))") End Function Sub Test1() MsgBox xxx(Range("C2:C19"), Range("D2:D19")) End Sub 

要么

 Function xxx(x As String, y As String) xxx = Evaluate("SUMPRODUCT(" & x & ",((" & y & "=""text1"")*12+(" & y & "=""text2"")*4+(" & y & "=""text3"")*2))") End Function Sub Test2() MsgBox xxx("C2:C19", "D2:D19") End Sub