大家好,我們今日繼續講解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 轉置函數大家是否還記得呢?

相關文章