简单的VBA函数返回范围值的产品

我希望函数能够将一系列单元格作为参数并返回它们的产品。 让我们假设单元格的以下值:

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 

您可以直接使用PRODUCTVBA版本,即

 MsgBox WorksheetFunction.Product([a1:a3]) 

您可以使用Excel工作表函数。

如果只提供一个范围,则SUMPRODUCT的默认行为是返回总和,以便您可以通过以下方式将范围传递给SUMPRODUCT

 WorksheetFunction.Sumproduct(**your range goes here**) 

确定=PRODUCT ,哪个工作( SUMPRODUCT不会做什么最初的家伙问)。

但是,只是为了好玩,使用math函数EXP和LN的属性,我们有这个if

 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)))然后瞧! (您必须使用CTRL + SHIFT + ENTER

如果你坚持写你自己的function,然后尝试以下。 它将所有值加载到内存中,因此应该更快。

 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