2016-04-25 25 views
0

これは非常に基本的な質問ですが、私はちょうどvbaを学び始めており、価格array.hereの毎日の返品を計算する方法を理解するのが難しいです。私が書いたプログラムはあります。私はエラーを理解することができません。もし誰かがここで私を助けることができれば、プログラムはエラーなくコンパイルされますが、関数は値エラーを返します。vbaの株価収益率を計算する方法は?

Function ch2array(vdata As Variant) 
    If TypeOf vdata Is Range Then 
     ch2array = vdata.Value 
    Else 
     ch2array = vdata 
    End If 
End Function 


Function dailyret(rng) 
    rng = ch2array(rng) 
    Dim i, j As Integer 
    Dim nr, nc As Integer 

    nc = UBound(rng, 2) 
    nr = UBound(rng, 1) 

    Dim gm() As Double 
    ReDim gm(1 To nr, 1 To nc) 

    For j = 1 To nc 
     For i = 1 To nr 
      gm(i, j) = (Application.Index(rng, j, i)/Application.Index(rng, j, i - 1)) - 1 
     Next i 
    Next j 

    dailyret = gm 
End Function 
+1

あなたはどのようなエラーを取得し、どのラインでないと? – BruceWayne

+0

'ch2array'のコードも含めてください。 – Ralph

+0

こんにちはブルース、プログラムにはエラーはないようですが、それはちょうどfine.but私は#VALUEエラーを取得するために必要な答えを得ることはありません – slayer175

答えて

0

このような何かを得るかの操作を行います。

pic

を実行し、このコード:

Option Explicit 

Public Sub FillROR() 
    Dim rng As Range 
    Set rng = Range("B2") 
    Dim i As Long, n As Long 
    If IsEmpty(rng.Value2) Then 
     'Missing data 
     Exit Sub 
    End If 
    If IsEmpty(rng.Offset(1, 0).Value2) Then 
     'Only one price point 
     Exit Sub 
    End If 
    n = rng.End(xlDown).Row - rng.Row + 1 
    Set rng = rng.Resize(n, 1) 

    Dim prices As Variant 
    prices = rng.Value2 

    Dim ror As Variant 
    'Ror can only be caclulated for n-1 values 
    ReDim ror(1 To n - 1, 1 To 1) 
    For i = 1 To n - 1 
     ror(i, 1) = prices(i + 1, 1)/prices(i, 1) - 1# 
    Next i 

    'Move one column to the right, one row down 
    rng.Offset(1, 1).Resize(n - 1, 1).Value2 = ror 
End Sub 
関連する問題