Excel 返回范围值乘积的简单VBA函数
我希望函数将一系列单元格作为参数并返回它们的乘积。 让我们假设单元格的以下值:Excel 返回范围值乘积的简单VBA函数,excel,product,vba,Excel,Product,Vba,我希望函数将一系列单元格作为参数并返回它们的乘积。 让我们假设单元格的以下值: A1=5 A2=2 A3=3 让我们调用函数Multiply。 =乘法(A1:A3)将返回30(=5×2×3) 代码是什么?我只是想熟悉一下语法,这会有很大帮助 编辑:找到答案: Function multiply(rng As Range) multiplied = 1 For Each cell In rng multiplied = multiplied * cell
A1=5
A2=2
A3=3
让我们调用函数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
您可以使用excel工作表函数 如果只提供一个范围,则
SUMPRODUCT
的默认行为是返回总和,这样您就可以通过以下方式将范围传递给SUMPRODUCT
:
WorksheetFunction.Sumproduct(**your range goes here**)
您可以直接使用
VBA
版本的PRODUCT
,即
MsgBox WorksheetFunction.Product([a1:a3])
OK for
=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))
所以只要输入a
cel:=EXP(SUM(LN(A1:C1))
就可以了!(必须使用CTRL+SHIFT+ENTER)如果坚持编写自己的函数,请尝试以下操作。它首先将所有值加载到内存中,因此应该工作得更快
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
很好,你自己解决了这个问题,但是它输给了内置的
=PRODUCT
公式或下面给出的VBA等效公式,因为有两个原因:一是,它是一个自定义函数,所以它已经自然地变慢了,而它在一个循环中,使慢度更加复杂。其次,您还没有考虑到其中没有值的范围<代码>产品可以。如果你必须完全使用你的函数,至少添加一个如果Len(cell.Value)>0那么…
条件。否则,当您有空单元格时,您可能会得到0
。