【问题标题】:Deleting rows when two blank rows are concurrent两个空行并发时删除行
【发布时间】:2017-10-17 19:03:23
【问题描述】:

目前我正在使用以下方法从通常有 200 到 700 行的工作表中删除空白行。

Sub DeleteBlankRows2()
Dim i As Integer
Dim lastrow As Long
Dim Emptyrow As Long

lastrow = Application.CountA(Range("a:a"))
Emptyrow = Application.CountA(ActiveCell.EntireRow)

Range("a1").Select

For i = lastrow To 1 Step -1
    If Emptyrow = 0 Then
            Cells(i, 1).EntireRow.Delete
        Else
            Cells(i, 1).Offset(1, 0).Select
        End If
   Next i

End Sub

不幸的是,我遇到了一些问题,因为每次运行时行数都会发生变化。我观察到的是,第一个循环将删除四行,第二个循环删除两行,直到只剩下一行包含信息。不确定为什么要删除 A 列中包含信息的单元格的行?

【问题讨论】:

  • 1. Emptyrow 不会重新计算每个循环。 2. 在 A 列上使用 COUNTA 并带有空格会得到一个错误的 lastrow。

标签: excel vba


【解决方案1】:
  1. Emptyrow 不会重新计算每个循环。
  2. 在 A 列上使用 COUNTA 并带有空格将会给您一个错误的 lastrow。

创建一个范围对象,当您找到空行时,您将该行添加到该范围。然后一次删除整个范围。

使用:

Sub DeleteBlankRows2()
Dim i As Integer
Dim rng As Range
Dim lastrow As Long
Dim Emptyrow As Long

With ActiveSheet 'better to use actual sheet name "WorkSheets("Sheet1")

    lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row

    For i = lastrow To 1 Step -1
        If Application.WorksheetFunction.CountA(.Rows(i)) = 0 Then
            If rng Is Nothing Then
                Set rng = .Rows(i)
            Else
                Set rng = Union(rng, .Rows(i))
            End If
        End If
    Next i
    If Not rng Is Nothing Then rng.Delete
End With

End Sub

【讨论】:

  • 好的,谢谢。我真的没有掌握您最初的评论,我将不得不通读几次才能完全掌握它。我已将其放入工作簿中,并且似乎可以正常工作。我发现一些信息在这个过程中仍然被丢弃。我得仔细研究一下。再次感谢。
猜你喜欢
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2018-09-05
  • 2012-12-25
  • 2019-06-09
相关资源
最近更新 更多