任何人都可以給我一些見解,爲什麼這需要這麼長時間才能運行?我在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