Sumproduct 作为 VBA 中的函数

Sumproduct as a function in VBA

我想看看是否可以在 VBA 中制作一个 sumproduct 函数。我可以制作一个在 Excel 中完美运行的作品,如下所示:

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

我有 2 列,目标是根据来自另一列的单元格的不同文本,将第一列的单元格与数字相乘。这是如上所示完成的。但是,由于我使用它很多,实际上每次都需要一些时间来编写,所以我想看看我是否可以在 VBA 中创建一个函数,它可以只 select x (第一列)和 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) 列作为范围。有什么建议吗?谢谢阅读! :)

尝试以下功能之一...

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