Excel VBA性能 - 100万行 - 在不到1分钟的时间内删除包含值的行
我试图在不到一分钟的时间内找到一种方法来过滤大数据并删除工作表中的行
目标:
在第1列中查找包含特定文本的所有记录,然后删除整行
保持所有单元格格式(颜色,字体,边框,列宽)和公式
。
测试数据:
。
代码如何工作:
首先关闭所有Excel功能
如果工作簿不为空,并且要删除的文本值存在于第1列中
将单元格地址添加到格式的tmp字符串中 "A11,A275,A3900,..."
如果tmp变量长度接近255个字符
使用删除行 .Range("A11,A275,A3900,...").EntireRow.Delete Shift:=xlUp
将tmp重置为空并继续前进到下一组行
将列1的已使用范围复制到数组
向后迭代数组中的每个值
当找到匹配时:
最后,它将所有Excel功能重新打开
。
主要问题是删除操作,总持续时间应低于一分钟。任何基于代码的解决方案都是可以接受的,只要它在1分钟内执行即可。
这将范围缩小到极少数可接受的答案。已经提供的答案也非常简短,易于实施。一个人在大约30秒内执行操作,因此至少有一个答案提供了可接受的解决方案,其他人可能会发现它也很有用
。
我的主要初始功能:
Sub DeleteRowsWithValuesStrings() Const MAX_SZ As Byte = 240 Dim i As Long, j As Long, t As Double, ws As Worksheet Dim memArr As Variant, max As Long, tmp As String Set ws = Worksheets(1) max = GetMaxCell(ws.UsedRange).Row FastWB True: t = Timer With ws If max > 1 Then If IndexOfValInRowOrCol("Test String", , ws.UsedRange) > 0 Then memArr = .Range(.Cells(1, 1), .Cells(max, 1)).Value2 For i = max To 1 Step -1 If memArr(i, 1) = "Test String" Then tmp = tmp & "A" & i & "," If Len(tmp) > MAX_SZ Then .Range(Left(tmp, Len(tmp) - 1)).EntireRow.Delete Shift:=xlUp tmp = vbNullString End If End If Next If Len(tmp) > 0 Then .Range(Left(tmp, Len(tmp) - 1)).EntireRow.Delete Shift:=xlUp End If .Calculate End If End If End With FastWB False: InputBox "Duration: ", "Duration", Timer - tEnd Sub
Smart猫小萌
米脂
相关分类