為什麼這篇excel vba寫入儲存格鄉民發文收入到精華區:因為在excel vba寫入儲存格這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者marki (marki)看板Office標題[算表] 請問vba的效能問題時間Thu Jan ...
軟體: Excel
版本: Mac Office 365
各位大大好
小弟剛開始摸索vba
在網路上看到這樣一篇文章
http://m.wangchao.net.cn/it/tcdetail_57466.html
大約在文章的1/5位置 有提到
=======================================
本技巧用于優化在Excel和代碼之間轉換數據的次數。使用數組變量存儲所需要的值並執行取值或賦值操作,而不是一次遍曆單個單元格並獲取或設置單個值。
例如,下面的代碼在單元格區域A1:C10000中放置隨機數。
代碼段一:運行速度較慢的代碼
Sub testSlow()
Dim DataRange As Range
Dim Irow As Long
Dim Icol As Integer
Dim MyVar As Double
Set DataRange = Range("A1:C10000")
For Irow = 1 To 10000
For Icol = 1 To 3
MyVar = DataRange(Irow, Icol) '從Excel單元格中讀取值30K次
If MyVar > 0 Then
MyVar = MyVar * MyVar ' 改變值
DataRange(Irow, Icol) = MyVar '將值寫入Excel單元格中30000次
End If
Next Icol
Next Irow
End Sub
代碼段二:運行速度更快的代碼
Sub testFast()
Dim DataRange As Variant
Dim Irow As Long
Dim Icol As Integer
Dim MyVar As Double
DataRange = Range("A1:C10000").Value '一次從Excel單元格中讀取所有的值,將其放入數組
For Irow = 1 To 10000
For Icol = 1 To 3
MyVar = DataRange(Irow, Icol)
If MyVar > 0 Then
MyVar = MyVar * MyVar ' 改變數組中的值
DataRange(Irow, Icol) = MyVar
End If
Next Icol
Next Irow
Range("A1:C10000").Value = DataRange '一次將所有結果寫回單元格
End Sub
=======================================
簡單的summary一下我的觀察
第一段的程式碼就是讓電腦讀進每一儲存格的數據 計算後直接寫進儲存格
第二段的程式碼是讓電腦讀進每一儲存格的數據 先存於陣列(應該就是中國
所稱的數組吧)。於陣列中計算後再存進儲存格。
我的疑問是這樣看起來。不論是第一段或是第二段的程式碼應該都需要把儲存
格的內容讀進記憶體。而第二段程式碼還需要多增加一個陣列變數的記憶體。
這樣為什麼會比較快啊?
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.239.223.196
※ 文章網址: https://www.ptt.cc/bbs/Office/M.1485395842.A.158.html