看板 Office 關於我們 聯絡資訊
※ 引述《ptguitar (佩蒂吉他)》之銘言: : 上次有問類似問題 : 現在遇到困難就是 : 遇到超大量資料 數十萬筆 : 而要刪除的條件很多 : 速度很慢 : 不知道有什麼更快速寫法 : === : ※ 引述《ptguitar (佩蒂吉他)》之銘言: : Sub test001() : Dim YY, XX, ZZ : YY = "*海外分行*" : XX = "*機構名稱*" : ZZ = "*工作表*" : For i = [A65536].End(xlUp).Row To 1 Step -1 : If Range("A" & i).Text Like YY Or Range("A" & i).Text Like XX Or Range("A" : & i).Text Like ZZ Then : Rows(i).Delete : End If : Next : End Sub Rows(i).Delete是一個很花費資源的動作 當行數一多,一行一行慢慢刪就會拖到快當機一樣 比較好的方式是先記好要刪的行數 掃完一遍之後讓電腦一次刪掉 試試: Sub test001() Dim YY, XX, ZZ YY = "*海外分行*" XX = "*機構名稱*" ZZ = "*工作表*" Dim delRng As Range For i = [A65536].End(xlUp).Row To 1 Step -1 '.xlsx檔行數不只65536喔 '建議可以用Range("A" & Rows.Count).End(xlUp).Row 代替 If Range("A" & i).Text Like YY Or _ Range("A" & i).Text Like XX Or _ Range("A" & i).Text Like ZZ Then If delRng Is Nothing Then Set delRng = Rows(i) Else Set delRng = Union(delRng, Rows(i)) End If End If Next i delRng.Delete End Sub -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.253.86 ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1515396924.A.9A1.html ※ 編輯: newacc (122.117.253.86), 01/08/2018 15:42:22
newacc: 補充,這種做法就不需要從屁股往回刪,我只是懶得改XD 01/08 15:46
newacc: 補充2,丟空範圍給Union會跳error,所以如果覺得執行數萬 01/08 15:51
newacc: 次邏輯判斷很浪費的話可以用On Error GoTo ErrHandler方式 01/08 15:51
newacc: 但我沒測過會不會比較快啦,因為理論上電腦應該會猜到那個 01/08 15:52
newacc: 條件為否,但我計結忘得差不多了0rz 01/08 15:53
ptguitar: 感謝!我再來研究看看 01/08 16:29