看板 Visual_Basic 關於我們 聯絡資訊
大約三千多筆資料,跑個迴圈+ 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