2013-04-25 42 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