VBA代码基于variables删除范围 – 运行缓慢

我使用此代码删除范围,该范围的最后一列(AA)中的某个单元格等于工作表(K2)中其他位置指定的variables。

代码使用Shift: xlUp删除数据并向上移动其余数据。

所有这些都一次完成一行,直到条件不再成立为止。

唯一的问题是,这个过程非常缓慢 – 即使是25-30行的数据被删除,一次一个。 我能做些什么来加快速度?

 Sub UncommitSession() Dim WHAT_TO_FIND As String Dim ws As Excel.Worksheet Dim FoundCell As Excel.Range Dim iVal As Integer iVal = Application.WorksheetFunction.CountIf(Range("AA5:AA800"), Range("K2")) WHAT_TO_FIND = Range("K2") For i = 1 To iVal Set ws = ActiveSheet Set FoundCell = ws.Range("AA:AA").Find(what:=WHAT_TO_FIND, lookat:=xlWhole) If Not FoundCell Is Nothing Then Range("Q" & FoundCell.Row & ":AA" & FoundCell.Row).Delete Shift:=xlUp Else MsgBox (WHAT_TO_FIND & " not found in session archive.") End If Next i End Sub 

我认为最快的解决scheme是设置自动筛选器,select可见行并删除它们。 下面是我的一个项目的示例,它使用了通过列表对象的自动筛选器:

 Dim lstTable As ListObject: Set lstTable = rngTarget.Worksheet.ListObjects.Add(xlSrcRange, rngTarget, , xlYes) lstTable.Range.AutoFilter colFilter, varValue lstTable.DataBodyRange.EntireRow.Delete 

在上面你需要改变rngTarget引用你的表,colFilter指的是AA的列号和varValue是WHAT_TO_FIND。

更新

定制它到您的代码:

 Sub UncommitSession() Dim ewsTarget As Worksheet: Set ewsTarget = ActiveSheet Dim varValue As String: varValue = ewsTarget.Range("K2").Value Dim rngTarget As Range: Set rngTarget = ewsTarget.Range("A5:AA800") Dim lstTable As ListObject: Set lstTable = rngTarget.Worksheet.ListObjects.Add(xlSrcRange, rngTarget, , xlYes) lstTable.Range.AutoFilter ewsTarget.Range("AA1") - ewsTarget.Range("A1") + 1, varValue lstTable.TableStyle = vbNullString lstTable.DataBodyRange.EntireRow.Delete lstTable.Unlist End Sub 

但是,我没有你的工作簿,所以我不能testing它。