我目前有一个代码,简而言之,我收到一个数组字典,并将该字典的每个项目分配给一系列单元格。正如预期的那样,问题是大量的细胞变得非常慢。
我使用的初始代码是:
For i = 1 To clxRtrn.Count
For j = 0 To UBound(clxRtrn.Item(i))
Worksheets("Sheet1").Cells(2 + i, 2 + j).value = clxRtrn(i)(j)
Next j
Next i
请注意:
clxRtrn.Count 'number of rows
UBound(clxRtrn.Item(i)) 'Number of columns
我用以下方式描述了速度:
Sub DebuggingSpeed()
Const n = 5
Dim sngTime As Single
Dim i As Long
sngTime = Timer
For i = 1 To n
Call SQLite_Query2
Next i
sngTime = (Timer - sngTime) / n
Debug.Print n & " runs in an average of " & Format(sngTime, "0.00") & " seconds."
End Sub
对于包含14列(总共7014项)的501行的字典,我得到以下结果:
5 runs in an average of 0,35 seconds.
对于包含84列(总共1260252项)的15003行的字典,我得到以下结果:
5 runs in an average of 37,32 seconds.
与this case中提出的问题不同,我必须在excel表中显示dict的结果(因此,循环遍历单元格)。我不想仅仅操纵数组中的数据,必须显示它们。
编辑: 根据{{3}},我们的想法是尽量减少工作表和VBA代码之间的流量。我采取了不同的方法。简而言之,我遍历字典并将每一行写入工作表:
For i = 1 To clxRtrn.Count
Worksheets("Database").Range(Cells(1 + i, 2), Cells(1 + i, UBound(clxRtrn.Item(i)))).value = clxRtrn(i)
Next i
这大大加快了执行速度:
5 runs in an average of 0,03 seconds.
5 runs in an average of 5,32 seconds.
此操作还有改进的空间吗?