我有一个30k行和15列的数据集。
我在列“O
”上设置了自动过滤器,以选择包含字符串“x
”的单元格并删除所有这些行。
代码需要很多时间来完成(约14秒)在一个非常强大的个人电脑。
我的代码是否经过了良好的规划,或者是否有更快的方法来删除这些筛选过的行?
提前,感谢任何有用的意见和答案。
Sub Macro1()
Dim ws As Worksheet, rng As Range, lastR As Long, lastC As Long
Set ws = ActiveSheet
lastR = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'Last Row on column 1
lastC = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column 'Last Column on Row 1
Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastR, lastC))
ws.Rows("1:1").AutoFilter
rng.AutoFilter Field:=15, Criteria1:="x"
Intersect(ws.Cells, rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow).Delete
End Sub
1条答案
按热度按时间vmdwslir1#
正如Joe所说,对数据进行排序可能会有所帮助。(别忘了在代码末尾打开它们)。而且,使用数组比直接使用工作表要快得多。不过,必须注意数据是否是静态的(即,不依赖于可能被改变的其余数据)。
我写了一段简单的代码来测试使用数组会有多快(或多慢)。
您的代码占用了
1.58 sec
。您的代码中包含
ScreenUpdating
和自动计算关闭了1.63 sec
。我的代码采用了
0.46 sec
。