简单的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
您可以直接使用PRODUCT
的VBA
版本,即
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