简单的VBA函数,返回范围值的乘积

时间:2013-12-02 04:07:36

标签: excel excel-vba product 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

4 个答案:

答案 0 :(得分:4)

您可以直接使用VBAPRODUCT,即

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