删除连续的行EXCEL VBA

时间:2015-07-24 08:49:32

标签: excel vba loops rows

我的数据在A栏中,我想删除B列中的所有连续行。 代码

  If Range("A" & i).Value = Range("A" & i).Offset(1, 0).Value Then
    Rows(i & ":" & i).Delete shift:=xlUp
  End If

我写了剧本,但我不知道怎么把它放在循环中..任何帮助谢谢。

enter image description here

2 个答案:

答案 0 :(得分:0)

通常,删除行最好从底部开始并向顶部移动。当你删除并且行向上移动时,这可以避免“跳过”一行。

Dim rw As Long

With Sheets("Sheet1")
    For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If .Cells(rw, 1).Value = .Cells(rw - 1, 1).Value Then _
            .Rows(rw).Delete
    Next rw
End With

同样,通常一列数据将具有您不希望在删除过程中涉及的列标题标签。但是,只要标签(如果有)与第2行中的单元格值不匹配,这应该不是问题。

答案 1 :(得分:0)

由于删除行非常耗时,此任务的最佳方法是使用Range函数将要删除的所有行收集到Union类的单个对象中,然后删除所有他们只需一次操作。

以下是介绍如何操作的代码:

Sub deleteConsecutiveRows()
    Dim wks As Excel.Worksheet
    Dim rng As Excel.Range
    Dim row As Long
    Dim lastRow As Long
    '-------------------------------------------------------------------------


    Set wks = Excel.ActiveSheet


    With wks
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).row

        For row = 2 To lastRow
            If .Cells(row, 1).Value = .Cells(row - 1, 1).Value Then

                If rng Is Nothing Then
                    Set rng = .Rows(row)
                Else
                    Set rng = Excel.Union(rng, .Rows(row))
                End If

            End If
        Next row

    End With


    'In order to avoid Run-time error check if [rng] range is not empty, before removing it.
    If Not rng Is Nothing Then
        Call rng.EntireRow.Delete
    End If


End Sub