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