首页 > 解决方案 > VBA - 删除空行直到有数据

问题描述

我有一个看起来像这样的数据,空行的数量可能会增加或减少并且不固定。

在此处输入图像描述

我想做的就是把它变成这个,删除空行,直到有数据并让它停止。我不希望它删除可能位于数据中间的其他空行。

在此处输入图像描述

我一直在测试某些东西,这就是我所拥有的,但是这段代码并没有清除所有的空行,而只是清除了一些。我意识到问题可能出在使用for each cell in rng方式上,因为当我使用时它会继续到下一个单元格cell.entirerow.delete,但我可能错了。

Sub Test()
    Dim cell as range, rng as range
    Dim lRow as long

    Set rng = Range("C3:C" & lRow)

    For Each cell In rng
        If IsEmpty(cell.Offset(-1)) Then
            cell.Offset(-1).EntireRow.Delete
        Else
            Exit For
        End If
    Next cell
End Sub

谢谢你帮忙

标签: excelvba

解决方案


您遇到了一个经典问题。挑战是;如果您删除第 26 行,之前为 27 的行将是 26。因此,下一个循环将跳过它,并且您留下(可能)空白行。

解决这个问题的一种方法是做一个向后循环。我的解决方案是:

Sub Test()
    Dim lRow As Integer

    For i = 2 To 100
        If IsEmpty(Cells(i, 1)) Then
            lRow = i
        Else
            Exit For
        End If
    Next i

    For i = lRow To 2 Step -1
        If IsEmpty(Cells(i, 1)) Then
            Cells(i, 1).EntireRow.Delete
        End If
    Next i

End Sub

这解决了这个问题,因为如果你删除第 26 行,之前的第 27 行将变为第 26 行。但是这个改变并不重要,因为循环现在从下到上,意味着下一个循环检查第 25 行。


推荐阅读