为什么这个VBA代码无限循环?

时间:2017-06-26 12:49:15

标签: excel vba

在Excel表格中,我有一组包含31列的150,000行数值数据。一列对应于30个变量,模拟5000次。更准确地说,前30行对应于第一次模拟,依此类推。 我想计算每个变量的中位数,这意味着要计算30 * 31个中位数。我写了这段代码:

Function median_simulation()
Dim feuille_statistiques As Worksheet, feuil1 As Worksheet
Dim term As Integer

Set feuil1 = Worksheets("Feuil1")
Set feuille_statistiques = Worksheets("Statistiques")


For i = 102 To 131
    For j = 2 To 32

        Dim rng2 As Range
        term = feuille_statistiques.Cells(i, 1).Value
        Set rng2 = feuil1.Range(feuil1.Cells(1 + term, (j + 5)), feuil1.Cells(1 + term, (j + 5)))

        For k = 1 To 4999
            Set rng2 = Union(rng2, feuil1.Cells(30 * k + 1 + term, (j + 5)))
        Next k

        feuille_statistiques.Cells(i, j).Value = WorksheetFunction.median(rng2)

    Next j
Next i

End Function

我不明白为什么,但尝试运行此代码会导致永无止境的计算。但是我相信代码正在工作,因为当我冻结i和j时(我尝试使用j = 2和i = 102)这是一些内存问题吗?我的代码是非最优的,有没有办法改进它?

1 个答案:

答案 0 :(得分:0)

median将使用数组,因此请使用数组而不是实际的范围对象。

Dim a() As Variant
a = Array(1, 5, 10, 11, 12, 13, 500, 7000)
Debug.Print Application.WorksheetFunction.Median(a)

例如