Board logo

標題: 這樣還可提升執行時間? [打印本頁]

作者: s7659109    時間: 2018-8-21 10:53     標題: 這樣還可提升執行時間?

原資料2500筆,載入6.6秒,如何修改縮短執行時間
Sub 載入資料()
Dim arr, arr1, i, Time0#
Time0 = Timer
arr = 工作表1.UsedRange
arr1 = Application.Transpose(Application.Transpose(arr))
For i = 1 To UBound(arr1)
工作表3.Cells(i + 3, 1) = arr(i, 5)
工作表3.Cells(i + 3, 2) = arr(i, 2)
工作表3.Cells(i + 3, 3) = arr(i, 3)
工作表3.Cells(i + 3, 4) = arr(i, 8)
工作表3.Cells(i + 3, 5) = arr(i, 9)
工作表3.Cells(i + 3, 6) = arr(i, 10)
工作表3.Cells(i + 3, 7) = arr(i, 11)
工作表3.Cells(i + 3, 8) = arr(i, 7)
工作表3.Cells(i + 3, 9) = arr(i, 6)
工作表3.Cells(i + 3, 10) = arr(i, 19)
工作表3.Cells(i + 3, 11) = arr(i, 20)
工作表3.Cells(i + 3, 12) = arr(i, 23)
工作表3.Cells(i + 3, 13) = arr(i, 24)
Next i
MsgBox "執行時間 " & Timer - Time0 & " 秒", vbOKOnly
End Sub
作者: 准提部林    時間: 2018-8-21 13:20

沒有檔案, 大概猜一下:
Sub 載入資料()
Dim Arr, Brr, i, S, j, Time0#
Time0 = Timer
Arr = 工作表1.UsedRange
ReDim Brr(1 To UBound(Arr), 1 To 13)
S = Array(5, 2, 3, 8, 9, 10, 11, 7, 6, 19, 20, 23, 24)
For i = 1 To UBound(Arr)
  For j = 1 To 13
   Brr(i, j) = Arr(i, S(j - 1))
  Next j
Next i
工作表3.[A4].Resize(UBound(Arr), 13) = Brr
MsgBox "執行時間 " & Timer - Time0 & " 秒", vbOKOnly
End Sub
作者: s7659109    時間: 2018-8-21 14:28

本帖最後由 s7659109 於 2018-8-21 14:30 編輯

謝謝版主,縮短3倍(1.7~2秒),一樣都是陣列,差在那?
另外,清空載入比原有資料覆蓋慢,又為何?
作者: 准提部林    時間: 2018-8-22 09:46

回復 3# s7659109


工作表3.Cells(i + 3, 1) = arr(i, 5)  這不是完全使用陣列, 是逐格寫入
arr是來源資料陣列, 但要轉寫的也要設一個陣列容納, 結束後再一次寫入
以原程式只須6.6秒, 照說給的程式應1秒內可完成, 沒看檔案無法測知~~

清除或直接覆蓋速度差異, 要看[清除]動作是一次還是逐格的, 速度差很多~~

另外, 要寫入的區域, 如果有牽動公式自動重算, 那速度一定會慢下來~~
作者: s7659109    時間: 2018-8-22 16:16

謝謝,又上了一課了.




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)