簡體   English   中英

簡單的VBA函數,返回范圍值的乘積

[英]Simple VBA function that returns product of range value

我希望函數將一系列單元格作為參數並返回其產品。 我們假設單元格的值如下:

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

您可以直接使用VBA版本的PRODUCT ,即

MsgBox WorksheetFunction.Product([a1:a3])

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

如果只提供一個范圍,則SUMPRODUCT的默認行為是返回總和,這樣您就可以通過這種方式將范圍傳遞給SUMPRODUCT

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

OK =PRODUCT ,它完成這項工作( SUMPRODUCT不會做最初的同事所要求的)。

但是,只是為了好玩,使用數學函數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)))和il! (你必須使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM