与えられた範囲のCAGRを計算するUDFを作成したいと思います。戻り値からCAGRを計算するUDF
関数に与えられたデータは、通常、月次リターンデータとなりますので、私がする必要がある:
- は一緒にすべてのセル
- は(の電源を取る乗算
- 範囲内の各セルに1を追加します。 )
私はそれを手動で行う場合、私は式 =製品に入力し(RNG + 1)^(1 /(COUNT(RNG)/ 12))1 /(範囲/ 12で数) - 1配列にはCTRL + Shift + Enterを入力してください
私はこれを行うには2つの異なる方法を試しました。最初は基本的に前述の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
私はformulaArray機能が間違って使用していますので、ライン
Total=Application.formulaArray="=Product(rng+1)"
が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%を計算し、そうすべきであることを強調したいと思いますに)。私は何時間もこの問題に苦しんでいますので、どんな助けでも大いに助かりました!
感謝
'" = Product(rng + 1) "'これはあなたが期待しているものを与えません。 '' = Product( "&rng&" +1) "'のように分割しなければならないでしょう。 'FormulaArray'はRangeのメソッドですオブジェクトではなく、アプリケーションです... – Mikegrann
'total'は' double'だからだと思いますが、あなたが書いたやり方は文字列です。あなたはVBで 'X = Y = Z'をすることもできますか?それを2行に分散する必要があるかもしれません。しかしなぜ 'product *(rng + 1)'の代わりに 'Total'の式配列を使っていますか? 'evaluate'が必要です。編集:ああ、私はあなたが何をしようとしていた参照してください、 'rng'はあなたの数式の変数です....他の人はそれを持っています。 – BruceWayne
@BruceWayneあなたはそうです、あなたはそのように割り当てることはできません。 「Xを(YはZと等しい)ブール値に設定する」と評価されます。いったん私は最終的にVBAのドキュメントを完成させるために取り組んでいます。私たちはこの種の問題にリンクする場所を用意しています。 – Mikegrann