16倍!數組寫入速度大幅提高,是因爲採用了批量寫入的高效方法
大家好,我們今日繼續講解VBA代碼解決方案的第113講內容:VBA數組的深入講解,數組批量寫入的高效方法。
一 數組的批量寫入
我們總在講求效率,對於數組的批量寫入,實際上用一條語句就可以完成。將數組的內容寫入單元格區域中,即:單元格區域=數組名,代碼:
Sub Mynz_sz6()
'創建數組,並賦值
Dim arr(1 To 60000), i As Long
For i = 1 To 60000
arr(i) = i
Next i
'將數組的值寫入單元格(c列)
[C1:C65536].Clear '清除原有數據
Dim startime As Double
startime = Timer
[C1:C60000] = Application.WorksheetFunction.Transpose(arr)
MsgBox "數組寫入共用了" & Timer - startime & "秒!"
End Sub
代碼截圖:
這裏,我們用"[C1:C60000]= Application.WorksheetFunction.Transpose(arr)"代替了代碼的For循環,不知大家是否還記得我之前講到的代碼呢?如下Mynz_sz5的內容:
Sub Mynz_sz5()
'創建數組,並賦值
Dim arr(1 To 60000), i As Long
For i = 1 To 60000
arr(i) = i
Next i
'將數組的值寫入單元格(C列)
[C1:C65536].Clear '清除原有數據
Dim irow As Long
Dim startime As Double
startime = Timer
For irow = 1 To 60000
Cells(irow, 3) = arr(irow)
Next irow
MsgBox "數組寫入共用了" & Timer - startime & "秒!"
End Sub
這段程序運行的時間是:1.07031秒,那麼Mynz_sz6的代碼會用時會是多少呢?我們看看運行的結果:
僅用了0.0625秒,提高了多少倍呢?大家可以算一算。是16倍以上! 所以在大批量的數據需要寫入時,我建議儘量不要用循環的方式寫入。
二 數組批量寫入時需要特別注意的幾點。
1 一維數組寫入單元格區域時,這個單元格必須是水平方向的,也就是一個一行多列的單元格區域,如果想寫入垂直區域,必須使用工作表的Transpose函數轉換一下;
2 和工作表的多單元格數組公式一樣,數組寫入單元格時,單元格的區域必須和數組的大小一致。
今日內容迴向:
1 數組批量寫入如何能有效的節約時間呢?
2 轉置函數大家是否還記得呢?