Sumproduct作为VBA中的一个功能

时间:2017-12-11 00:36:46

标签: excel vba sum product worksheet-function

我想看看是否可以在VBA中创建一个sumproduct函数。我可以在Excel中制作一个完全正常的工具,如下所示:

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

我有2列,目标是根据来自另一列的单元格的不同文本,将第一列中的单元格与数字相乘。这是如上所示完成的。但是,由于我使用它相当多,实际上每次写入都需要一些时间,因此我想看看我是否可以在VBA中创建一个只能选择x(第一列)和y(第二列)的函数,结果就在那里。到目前为止,我一直在研究这个问题,但还是没能使它发挥作用:

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

我不能对例如C2:C19的行和列进行任何特定引用,因为它变化很大,所以我只想选择第一列(x)和第二列(y)作为范围。任何建议?谢谢阅读! :)

1 个答案:

答案 0 :(得分:2)

尝试以下功能之一...

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

OR

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