[爆卦]excel vba寫入儲存格是什麼?優點缺點精華區懶人包

為什麼這篇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
Catbert: 因為"寫入儲存格"這個動作很花時間 01/26 15:01
waiter337: 讀資料都很快,但是寫資料....超級久 01/26 19:42
waiter337: 而且一次貼上10000個資料跟一次貼上一個資料做10000次 01/26 19:43
waiter337: 時間後者又更長到誇張,前者可能5秒,後者可能3000秒 01/26 19:43
waiter337: 所以超過1000列的資料,基本上都改用陣列,在一次貼上最 01/26 19:44
waiter337: 快 01/26 19:44
marki: 謝謝 01/26 21:50
nicegigi: 太神了 03/08 23:07

你可能也想看看

搜尋相關網站