我想製作一個UDF來計算給定範圍的CAGR。UDF根據回報數據計算CAGR
賦予功能的數據將典型地每月返回數據,所以我需要:
- 添加1至每個小區在範圍
- 乘法所有細胞一起
- 採取的功率( )
如果我做手工我想鍵入式 =產物(RNG + 1)^(1 /(計數器(RNG)/ 12))1 /(在範圍/ 12號) - 1並輸入數組CTRL + Shift + Enter
我已經嘗試了兩種不同的方式來完成這項工作。首先是基本上做前面提到的公式vba。
Option Explicit
Function CAGR(rng As Range) As Double
Dim total As Double
Dim n As Integer
Dim pwr As Double
Total = Application.FormulaArray="=Product(rng+1)"
n = Application.WorksheetFunction.Count(rng)
pwr = (1/(n/12))
CAGR = Application.WorksheetFunction.Power(total, pwr) - 1
End Function
然而行
Total=Application.formulaArray="=Product(rng+1)"
因爲我使用的formulaArray功能失常
無法工作presumebly ...
另一種方法我都試過是使函數一個循環,我想在該範圍中的每個單元格值上加1,並將它們相乘。 (不是整個功能)。
Option Explicit
Function CAGR2(rng As Range) As Double
Dim cell As Variant
Dim k As Double
Dim n As Integer
For Each cell In rng
cell.Value = cell.Value + 1
Next cell
k = Application.WorksheetFunction.Product(rng)
CAGR2 = k
End Function
所有CAGR功能我已經在互聯網上發現似乎對價格的數據,所以我想強調的是,這個功能應該計算在返回的數據(1%,2%,3%等上)。
我一直在爲這個問題苦苦掙扎幾個小時,所以任何幫助將大大appriciated!
非常感謝
'「=產品(rng + 1)」'這不會給你你的期望。如果你想使用一個像這樣的變量中間字符串,就必須像「」= Product(「&rng&」+1)「一樣分解它」'更不用說'FormulaArray'是範圍object,not Application ... – Mikegrann
我認爲這是因爲'total'是一個'double',但是你寫它的方式,它是一個字符串。你甚至可以在VB中執行'X = Y = Z'嗎?您可能需要將其分成兩行。但是,爲什麼你使用公式數組來代替'Total *'而不是僅僅使用'product *(rng + 1)'?你需要「評估」。編輯:哦,我明白你在想什麼,'rng'是你公式中的一個變量。 – BruceWayne
@BruceWayne你是對的,你不能這樣分配。它評估爲「將X設置爲(Y等於Z)的布爾值」。一旦我終於完成了我正在處理的VBA文檔,我們將有一個地方來解決這類問題。 – Mikegrann