Re: [算表] vba迴圈刪除類似字眼資料?

看板Office作者 (XD)時間8年前 (2018/01/08 15:35), 8年前編輯推噓0(006)
留言6則, 2人參與, 8年前最新討論串3/4 (看更多)
※ 引述《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

01/08 15:46, 8年前 , 1F
補充,這種做法就不需要從屁股往回刪,我只是懶得改XD
01/08 15:46, 1F

01/08 15:51, 8年前 , 2F
補充2,丟空範圍給Union會跳error,所以如果覺得執行數萬
01/08 15:51, 2F

01/08 15:51, 8年前 , 3F
次邏輯判斷很浪費的話可以用On Error GoTo ErrHandler方式
01/08 15:51, 3F

01/08 15:52, 8年前 , 4F
但我沒測過會不會比較快啦,因為理論上電腦應該會猜到那個
01/08 15:52, 4F

01/08 15:53, 8年前 , 5F
條件為否,但我計結忘得差不多了0rz
01/08 15:53, 5F

01/08 16:29, 8年前 , 6F
感謝!我再來研究看看
01/08 16:29, 6F
文章代碼(AID): #1QKnyycX (Office)
文章代碼(AID): #1QKnyycX (Office)