优化:Excel VBA宏删除合并单元格的底行

时间:2018-08-28 16:18:13

标签: excel vba performance function optimization

我的工作正常,但速度很慢。重命名某些单元格的第一个功能运行起来非常快,但是删除多个合并的单元格行的while循环需要花费一分钟多张纸。

以下是相关代码:

$1

2 个答案:

答案 0 :(得分:2)

如果还没有,请在代码的开头添加application.screenupdating=false,并在代码的末尾添加application.screenupdating=true,以加快处理速度。

然后,如果仍然很慢,请一次全部删除:

Dim rgToDelete As Range

i = LastRow - rowtofilter
Do While i > (rowtofilter - 1)
    If Range(ColumnLetter1 & i).Value = 0 And Range(ColumnLetter2 & i) <> "string1" And Range(ColumnLetter4 & i) <> "string2" Then
        If rgToDelete Is Nothing Then 
             Set rgToDelete = Range(ColumnLetter1 & i) 
        Else 
             Set rgToDelete = Union(rgToDelete , Range(ColumnLetter1 & i))
        End If
    End If
    i = i - 1
Loop


rgToDelete .EntireRow.Delete

答案 1 :(得分:0)

  1. 仅使用UsedRange而不是使用Rows.Count。 Worksheet.UsedRange.Rows.Count
  2. 在进行第二批处理时隐藏工作表。 Excel希望使用每个已删除的行来更新屏幕。通过隐藏工作表,您可以停止这种胡说八道。 Worksheet.Visible = xlSheetVeryHidden
  3. 如果存在基于要删除的行的计算,请在执行删除操作时关闭自动计算。实际上,您可能仍然会这样做。这将防止Excel在每次删除时重新计算工作表。 Application.Calculation = xlCalculationManual

请记住在完成后重新打开所有内容。

*请注意,在上述示例中,工作表应替换为对您正在使用的任何工作表的引用。