【问题标题】:Excel VBA - Work with Subgroup of ArrayExcel VBA - 使用数组的子组
【发布时间】:2013-04-25 13:19:45
【问题描述】:

我有一个包含 1000 个条目的一维数组。我想遍历这个数组的一部分并应用计算该子组的平均值。到目前为止我所做的看起来是这样的:

        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

【问题讨论】:

  • 子组?每十行?包含特定值/单词的 2 行之间的每一行。用户输入的范围。包含特定值的行的平均值?我们知道的越多,我们能提供的帮助就越多。

标签: arrays loops excel vba


【解决方案1】:

如果您不了解更多如何循环这些内容,您可以:

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 &")"))

【讨论】:

  • 您的代码确实有效!非常感谢!你能看看我的更新吗?
  • 如果它对您有用,请考虑接受它作为“解决方案”。至于速度/慢度,n 的值是多少?如果您正在执行任何操作数千次,则需要一些时间来处理此循环。
  • N 没有那么大。我之前(完全)以不同的方式编写了代码(我的意思是使用不同的概念)并且运行时间不到 1 秒。现在大约需要 3 秒。当然没那么多,别担心,我只是想知道是否有更有效的解决方案 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 2022-07-26
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2019-01-28
相关资源
最近更新 更多