Re: [算表] vba循环删除类似字眼资料?

楼主: newacc (XD)   2018-01-08 15:35:21
※ 引述《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
楼主: newacc (XD)   2018-01-08 15:46:00
补充,这种做法就不需要从屁股往回删,我只是懒得改XD补充2,丢空范围给Union会跳error,所以如果觉得执行数万次逻辑判断很浪费的话可以用On Error GoTo ErrHandler方式但我没测过会不会比较快啦,因为理论上电脑应该会猜到那个条件为否,但我计结忘得差不多了0rz
作者: ptguitar (佩蒂吉他)   2018-01-08 16:29:00
感谢!我再来研究看看

Links booklink

Contact Us: admin [ a t ] ucptt.com