返回列表 上一主題 發帖

[發問] 請問有辦法加快VBA執行的速度嗎?

[發問] 請問有辦法加快VBA執行的速度嗎?

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


由於Excel 檔案太大
因此先上傳 程式碼..

回復 1# m077

資料/篩選
的功能有試過嗎?
學海無涯_不恥下問

TOP

回復 2# Hsieh

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

不過發現當資料數太大時,常會發現子資料頁面裡的資料會有摻雜其他條件的資料(篩選不完整)
因此才嘗試這總方式~

TOP

回復 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
複製代碼

TOP

回復  Hsieh

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


補上圖片

TOP

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

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

如果要改成逐筆匯出,不知道要怎修改才有辦法?

TOP

還是覺得用進階篩選快
Hung-Chi Lin/林宏吉
HUNGCHILIN/林宏吉的OFFICE專欄

TOP

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

你應該把條件列出來  看是進階篩選條件哪裡可改善
才能篩到你要的結果會比較好

TOP

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

TOP

        靜思自在 : 一個缺口的杯子,如果換一個角度看它,它仍然是圓的。
返回列表 上一主題