作者kikkoko (海海人生)
看板Visual_Basic
標題[VBA ] 迴圈跑很慢
時間Mon Jun 16 19:51:04 2014
大約三千多筆資料,跑個迴圈+ if then竟然要跑這麼久
請問有哪邊可以改寫讓程式效率更快速嗎~ tks~
程式碼:
Sub XX()
Application.ScreenUpdating = False
Dim i As Integer
Dim AA As Integer
Dim BB As String
i = 2
Do Until Cells(i, 1).Value = ""
If Cells(i, 1).Value Like "ASM*" Then
AA = Application.Find("_", Cells(i, 3))
BB = Left(Cells(i, 3), AA - 2)
Cells(i, 13).Value = BB
End If
i = i + 1
Loop
Application.ScreenUpdating = True
End Sub
--
t a ╭ ◢██◣═◢██◣◥███◣═███◢██◣═球˙來就打══╮t a
h n ║ █◤ ◥ █◤ ◥ ████ █ █ █ ╴ ∕ ║h n
e s ║ █ █ █▌ ◥██◣ ◢◤  ̄╱〉 ║e s
w ˙─────────────────────── ☆ ║ w
e ║ ◥██◤ ◥██◤ █▌ ◥██◤███ ╱ ╰ ║ e
r 3╰═══════════ ◤════════════ Copy CCF ╯--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.11.114
※ 文章網址: http://www.ptt.cc/bbs/Visual_Basic/M.1402919467.A.E39.html
→ Catbert:用Instr取代Application.Find吧 06/16 23:02
→ kikkoko:跑的速度不多~有用過 06/16 23:14
→ MOONRAKER:這麼久是多久 06/17 00:33
推 tsongs:EXCEL不是資料庫 3000筆的確會跑很久 06/17 00:58
→ tsongs:Like那邊改成 left(Cells(i,1),3) = "ASM" 看看 06/17 01:00
→ tsongs:資料庫用LIKE也會慢不少 不清楚這樣能不能改善 06/17 01:02
→ tsongs:這種花時間的可以寫個變數不同語法看跑的時間差 06/17 01:04
→ tsongs: 看 06/17 01:05
→ MOONRAKER:VB和SQL的LIKE operator是兩回事 請勿擅自引申 謝謝 06/17 12:30
→ kikkoko:約2:15秒,LIKE不用僅快1秒 06/17 22:39
→ kikkoko:有想過先用autofilter把ASM篩出來再做動作,但不太會XD 06/17 22:40
推 GoalBased:先釐清慢的問題在哪? 06/17 23:09
→ kikkoko:三千筆資料無法縮減…就是三千筆的情況下跑迴圈 06/18 00:52
推 tsongs:3000筆2分鐘還好 要是執行頻率太頻繁 建議寫入資料庫 06/18 08:12
→ tsongs:大量資量還是用資料庫才快 06/18 08:13