任何人都可以给我一些见解,为什么这需要这么长时间才能运行?我在Parallels上运行WinXP,使用16GB MacBook Pro(分配给VM的4Gig)。电子表格本身(由我的客户创建)是一个绝对的噩梦 - 38张完整的可笑复杂的公式,以及多步骤过于复杂的算法,这些都会让Rube Goldberg非常嫉妒。但是,这个简单的例程需要30分钟才能运行。真的很慢循环
Sub oneList()
'Application.ScreenUpdating = False
ncols = Range("scores").Columns.Count
nrows = Range("sc_id").Rows.Count
'MsgBox nrows, ncols
ReDim Preserve scores(1 To nrows, 1 To ncols)
For i = 2 To nrows
For j = 1 To ncols
scores(i, j) = Application.Index(Range("scores"), i, j)
' Debug.Print i, j
' Debug.Print scores(i, j)
' Sheet36.Range("A1:D197").Cells(i - 1, j).Value = scores(i, j)
Next j
Next i
Sheet36.Range("A1:D197").Clear
For a = 1 To nrows
For b = 1 To ncols
Sheet36.Range("A1:D197").Cells(a, b).Value = scores(a, b)
Next b
Next a
End Sub
在此先感谢您的任何见解。
感谢您的支持!我在第一个循环之前进行了手动计算,在最后一个循环之后进行了自动计算。它加快了一点,但并不多。我不清楚我是否需要强制计算循环内的某处;我完全抛弃了这一点。 – SteveS 2014-10-06 21:10:00
Application.index()在做什么?它看起来像遍历行和列,将它们分配给一个二维数组,然后再粘贴该数组。为什么不跳过迭代并使一个范围与另一个范围相等? – JNevill 2014-10-06 21:19:35
好的。但实际上,我只是将这个例程作为一个自学教程,在对数组做更复杂的工作的方式上。合理? 我知道,因为我已经把这个子程序分成了两个进行测试,前半部分(填充数组)很快。第二部分(将阵列粘贴到新的范围内)大约需要15分钟。十五分钟!!! – SteveS 2014-10-06 23:28:36