VBA基于条件删除行的过程缓慢

时间:2014-09-08 15:01:08

标签: excel vba excel-vba row

我有一个VBA Excel代码,用于检查特定列中的值。如果该列中的行包含值“删除”,则删除该行。

代码效果很好,但速度很慢。关于如何让代码运行得更快的任何想法?

    Dim rng1 As Range
    Dim i As Integer, counter As Integer
    'Set the range to evaluate to rng.
    Set rng1 = Range("g1:g1000")
    'initialize i to 1
    i = 1
    'Loop for a count of 1 to the number of rows
    'in the range that you want to evaluate.
    For counter = 1 To rng1.Rows.Count
        'If cell i in the range1 contains an "Delete"
        'delete the row.
        'Else increment i
        If rng1.Cells(i) = "Delete" Then
            rng1.Cells(i).EntireRow.Delete
        Else
            i = i + 1
        End If
    Next

由于

下进行。

3 个答案:

答案 0 :(得分:1)

Sub deletingroutine()
  Dim r As Range
  For Each r In Range("g1:g1000")
     If r = "delete" Then r.EntireRow.Delete

  Next r
End Sub

答案 1 :(得分:0)

我设法找到了一个使用自动过滤功能的解决方案。

希望它有助于某人

    Selection.AutoFilter
    Set ws = ActiveWorkbook.Sheets("UploadSummary")
    lastRow = ws.Range("G" & ws.Rows.Count).End(xlUp).Row
    Set rng = ws.Range("G1:G" & lastRow)
    ' filter and delete all but header row
    With rng
        .AutoFilter Field:=7, Criteria1:="delete" ' 7 refers to the 7th column
        .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With

答案 2 :(得分:0)

尝试对行进行排序(在B列上),然后在一个操作中删除所有标记的("删除#34;)行。那要快得多。