我希望函数将一系列单元格作为参数并返回其产品。 我们假设单元格的值如下:
A1=5
A2=2
A3=3
让我们调用函数Multiply
。
=Multiply(A1:A3)
将返回30(= 5×2×3)。
这是什么代码?我只是想熟悉语法,这将有很多帮助。
编辑:想通了:
Function multiply(rng As Range)
multiplied = 1
For Each cell In rng
multiplied = multiplied * cell.Value
Next
multiply = multiplied
End Function
答案 0 :(得分:4)
您可以直接使用VBA
版PRODUCT
,即
MsgBox WorksheetFunction.Product([a1:a3])
答案 1 :(得分:1)
您可以使用Excel工作表功能。
如果只提供一个范围,则SUMPRODUCT
的默认行为是返回总和,这样您就可以通过这种方式将范围传递给SUMPRODUCT
:
WorksheetFunction.Sumproduct(**your range goes here**)
答案 2 :(得分:1)
确定=PRODUCT
,完成这项工作(SUMPRODUCT
不会做最初的同事所要求的)。
但是,只是为了好玩,使用数学函数EXP和LN的属性,如果
X = A1*B1*C1 then
LN(X) = LN(A1)+LN(B1)+LN(C1)
and
X = EXP(LN(X)) or
X = EXP(LN(A1)+LN(B1)+LN(C1))
所以只需加入cel: =EXP(SUM(LN(A1:C1)))
并vo! (你必须使用 CTRL + SHIFT + ENTER )
答案 3 :(得分:0)
如果您坚持编写自己的功能,请尝试以下操作。它首先将所有值加载到内存中,因此应该更快。
Public Function RngProduct(ByRef r as Range) as Double
Dim vals() as Variant, res as Double
vals = r.Value
Dim i as Long, N as Long
N = r.Rows.Count
res = #1
For i=1 to N
res = res * vals(i,1)
Next i
RngProduct = res
End Function