2013-04-25 81 views
0

我有一個具有1000個條目的1維數組。我想循環遍歷這個數組的一部分,並在該子羣上應用計算平均值。我到目前爲止所做的工作如下所示:Excel VBA - 使用子組的數組

 Temp = Array(myArray) 

     Temp_Range = Application.Index(Temp, Evaluate("Row(1:10)")) 

     Average(i) = Application.Average(Temp_Range) 

通過這個我可以計算前10行的平均值。然而,這不是動態的,我想知道是否有另外一種方式來處理這個數組的子組(這樣我最終可以循環它們)?

感謝您的幫助,我實在不明白這一個...

更新: 我St.Dev(不是平均值)試圖在這裏你的代碼。有用!非常感謝。但是,代碼非常慢。有沒有辦法讓它更快?

這裏循環:Return是一個1000返回的數組。我的目標是計算一年的日收益數據的標準差。

For i = 2 To n 

    If Year(Dates(i)) > Year(Dates(i - 1)) Then 

     Test = Application.Index(Return, Evaluate("Row(" & C & ":" & (i - 2) & ")")) 

     Vola(M) = Application.StDev(Test) * Sqr(252) 

     M = M + 1 
     C = i - 1 

    Else 

     Test = Application.Index(Return, Evaluate("Row(" & C & ":" & (i - 1) & ")")) 

     On Error Resume Next 
     Vola(M) = Application.StDev(Test) * Sqr(252) 

    End If 

Next i 
+0

亞羣?每十行?包含特定值/字的2行之間的每一行。用戶輸入範圍。包含特定值的行的平均值?我們知道得越多,我們就可以提供更多幫助。 – user2140261 2013-04-25 13:25:56

+0

請參閱更新。 – Dani 2013-04-25 14:35:54

回答

0

不知道任何更多你如何通過這些循環,你可以:

Dim frstRow as Long, lstRow as Long 

'within your loop, assign the values to frstRow, lstRow 

Temp_Range = Application.Index(Temp, Evaluate("Row(" & frstRow & ":" & lstRow &")")) 
+0

你的代碼確實有用!非常感謝!你能看看我的更新嗎? – Dani 2013-04-25 14:36:23

+0

如果它正在爲您工作,請考慮接受它作爲「解決方案」。至於速度/慢度,'n'的價值是什麼?如果您正在執行數千次操作,則需要一些時間來處理此循環。 – 2013-04-25 14:44:00

+0

N不是那麼大。我之前完全不同地寫了代碼(我的意思是不同的概念),並且運行時間不到1秒。現在大約需要3秒鐘。當然,不要擔心,我只是想知道是否有更高效的解決方案=) – Dani 2013-04-25 15:20:00