標題:
[發問]
請問有辦法加快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
沒上傳 ... 自己試試行否
Sub Test()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim r As Long, i As Long
Dim ar, rngCopy As Range
With Workbooks("vbtest.xls")
With .Sheets("sheet1")
r = .Cells(.Rows.Count, "G").End(xlUp).Row
ar = Application.Transpose(.Range(.Cells(1, 30), .Cells(r, 30)).Value)
For i = 2 To r
If ar(i) = "C2A4TST1" Then
If rngCopy Is Nothing Then Set rngCopy = .Rows(i) Else Set rngCopy = Union(rngCopy, .Rows(i))
End If
Next
.Select
rngCopy.Copy .Sheets("sheet2").Range("A" & .Rows.Count).End(xlUp).Offset(1)
.Sheets("sheet2").Select
End With
End With
Set rngCopy = Nothing
Application.EnableEvents = True
Application.ScreenUpdating = True
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/)