我有一张3万到5万行的数据表,大约有30个类别,需要根据单独页面上不同单元格列表中的文本删除其中的一些类别。数据位于标题为“项目”的选项卡上,而要删除的类别的不同列表位于另一个选项卡“wsGraphs”中,位于Q31开始的单元格中。通常有30000行和8个类别的查找和删除需要10到20分钟才能完成!任何帮助加快这一进程将不胜感激。
Dim Firstrow As Long
Dim Lastrow As Long
Dim lrow As Long
Set wsGraphs = ThisWorkbook.Sheets("Graphs")
With ThisWorkbook.Sheets("Projects")
'Set the first and last row to loop through
Firstrow = 4
Lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
'Loop from Lastrow to Firstrow (bottom to top)
For lrow = Lastrow To Firstrow Step -1
'Check the values in column A.
With .Cells(lrow, "A")
If Not IsError(Application.Match(.Value, wsGraphs.Range("Q31:Q" & xLR), 0)) Then .EntireRow.Delete
' End If
End With
Next lrow
End With
4条答案
按热度按时间ffscu2ro1#
这可能会快一点。将值加载到内存中,然后决定在那里保存什么。
neekobn82#
使用
AutoFilter
高效删除条件行zkure5ic3#
只使用
Union
运行一次删除..类似这样的东西....(我没有测试)xghobddn4#
如果我理解正确的话,另一种方式是这样的:
rgCrit是要删除的类别的变化列表的范围,从单元格Q31开始到工作表Graphs中的任何行。
sub不会循环到工作表Projects的列A中的每个单元格,而是循环到rgCrit中的每个单元格,以获取工作表Projects列A中的所有行,其中循环单元格的值作为rgU变量。
循环结束后,它选择rgU,这样您就可以检查要删除的行是否在选择中。
如果发现选择正确,则可以删除
rgU.select
行并使用rgU.entirerow.delete
但不确定这种代码是否能给予你更快地处理。