Board logo

標題: [發問] 請問有辦法加快VBA執行的速度嗎? [打印本頁]

作者: m077    時間: 2013-1-28 16:21     標題: 請問有辦法加快VBA執行的速度嗎?

主要是利用VBA 進行資料篩選後
將需要的資料由Sheet1(母資料頁面)複製到Sheet2(子資料頁面
但母資料頁面里約有4萬列,每列約有40行)
因此執行起來速度很慢
還請各位高人指點,是否有辦法改善執行數度
感謝
[attach]14087[/attach]

由於Excel 檔案太大
因此先上傳 程式碼..
作者: Hsieh    時間: 2013-1-28 16:33

回復 1# m077

資料/篩選
的功能有試過嗎?
作者: m077    時間: 2013-1-28 16:48

回復 2# Hsieh

因為主要目的是想要將不同條件的資料獨立到不同sheet 作後續的分析
原先的方式是下面這種(不知道您指的是不是這種方式)
    [attach]14090[/attach]

不過發現當資料數太大時,常會發現子資料頁面裡的資料會有摻雜其他條件的資料(篩選不完整)
因此才嘗試這總方式~
作者: stillfish00    時間: 2013-1-29 23:05

回復 1# m077
沒上傳 ... 自己試試行否
  1. Sub Test()
  2. Application.ScreenUpdating = False
  3. Application.EnableEvents = False

  4. Dim r As Long, i As Long
  5. Dim ar, rngCopy As Range

  6. With Workbooks("vbtest.xls")
  7.     With .Sheets("sheet1")
  8.         r = .Cells(.Rows.Count, "G").End(xlUp).Row
  9.         ar = Application.Transpose(.Range(.Cells(1, 30), .Cells(r, 30)).Value)
  10.         
  11.         For i = 2 To r
  12.             If ar(i) = "C2A4TST1" Then
  13.                 If rngCopy Is Nothing Then Set rngCopy = .Rows(i) Else Set rngCopy = Union(rngCopy, .Rows(i))
  14.             End If
  15.         Next
  16.         
  17.         .Select
  18.         rngCopy.Copy .Sheets("sheet2").Range("A" & .Rows.Count).End(xlUp).Offset(1)
  19.         .Sheets("sheet2").Select
  20.     End With
  21. End With

  22. Set rngCopy = Nothing
  23. Application.EnableEvents = True
  24. Application.ScreenUpdating = True
  25. End Sub
複製代碼

作者: m077    時間: 2013-1-30 13:15

回復  Hsieh

因為主要目的是想要將不同條件的資料獨立到不同sheet 作後續的分析
原先的方式是下面這種 ...
m077 發表於 2013-1-28 16:48


補上圖片
[attach]14109[/attach]
作者: m077    時間: 2013-1-30 13:25

剛試了一下 S大的方式,速度方面好像差不多
不過還是很感謝S大

想了一下,程式執行速度慢主要是因為把資料存在暫存記憶體中
等到迴圈執行完成後,才一次匯出
如果可以改成逐筆匯出的方式
是否能夠改善?

如果要改成逐筆匯出,不知道要怎修改才有辦法?
作者: HUNGCHILIN    時間: 2013-1-30 13:41

還是覺得用進階篩選快
作者: stillfish00    時間: 2013-1-30 15:15

回復 6# m077
看到圖片了..
逐筆匯出應該是更慢

你應該把條件列出來  看是進階篩選條件哪裡可改善
才能篩到你要的結果會比較好
作者: mhl9mhl9    時間: 2013-8-1 23:15

A=Array("sheet1","sheet2",...."sheetn")
B=Array("Criterial1","Criterial2",..."Criterialn")
for each i in A
   sheets(i).select
   ****advancedfilter
next i




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