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

在Excel表格中,我有一组150,000行的31列数字数据。 一列对应30个模拟5000次的variables。 更确切地说,前30行对应于第一次模拟,等等。 我想计算每个variables的中位数,这意味着要计算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 

我不明白为什么,但试图运行这个代码导致了一个永无止境的计算。 不过,我相信代码工作,因为它冻结我和j(我尝试了j = 2和i = 102),这是否是一些内存问题? 我的代码是不是最优的,有没有办法改进它?

median将工作的数组,所以使用一个数组,而不是实际的范围对象。

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

例如