1
在Excel表格中,我有一组150,000行的31列数值数据。一列对应于模拟5000次的30个变量。更确切地说,前30行对应于第一次模拟,等等。 我想计算每个变量的中位数,这意味着要计算30 * 31个中位数。我写了这个代码:为什么这个VBA代码无限循环?
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),这是否存在一些内存问题?我的代码是不是最优的,有没有办法改进它?
这不会导致无限循环,但你不应该被一遍又一遍的调光RNG2内循环。在循环外部声明它并在循环内重复设置它。 – Jeeped
@Jeeped谢谢我要试试这个。 – Gannicus
'median'将工作于一个数组,所以使用一个数组而不是实际的范围对象。'Dim a()As Variant:a = Array(1,5,10,11,12,13,300,7000): Debug.Print Application.WorksheetFunction.Median(a)' –