使用VBA删除空行 – MS Excel

我期待看看是否有更有效的方法来实现下面的结果,所以如果需要的话可以扩展。

我正在使用这个清理行CZ空白的大型电子表格。 我想应该有一种方法来清理它,所以如果我需要用C到AZ的数据清理一个电子表格,它的大小不会增加一倍。

我使用VBA已经有一段时间了,我在网上find了下面的代码。 (如同所讨论的电子表格一样,计算ROW B有一个空的ROW A)

Sub delem() Dim lr As Long, r As Long lr = Cells(Rows.Count, "B").End(xlUp).Row For r = lr To 1 Step -1 If Range("C" & r).Value = "" And Range("D" & r).Value = "" And Range("E" & r).Value = "" And Range("F" & r).Value = "" And Range("G" & r).Value = "" And Range("H" & r).Value = "" And Range("I" & r).Value = "" And Range("J" & r).Value = "" And Range("K" & r).Value = "" And Range("L" & r).Value = "" And Range("M" & r).Value = "" And Range("N" & r).Value = "" And Range("O" & r).Value = "" And Range("P" & r).Value = "" And Range("Q" & r).Value = "" And Range("R" & r).Value = "" And Range("S" & r).Value = "" And Range("T" & r).Value = "" And Range("U" & r).Value = "" And Range("V" & r).Value = "" And Range("W" & r).Value = "" And Range("X" & r).Value = "" And Range("Y" & r).Value = "" And Range("Z" & r).Value = "" Then Rows(r).Delete Next r End Sub 

谢谢!

只需添加一个内部循环来遍历您关心的列。 这实际上运行速度要快得多,因为VBA不会短路If语句(所有条件都被评估)。 但是通过这个循环,如果你在任何地方find一个值,你可以提早退出:

 Sub delem() Dim last As Long Dim current As Long Dim col As Long Dim retain As Boolean last = Cells(Rows.Count, "B").End(xlUp).Row For current = last To 1 Step -1 retain = False For col = 3 To 26 If Cells(current, col).Value <> vbNullString Then retain = True Exit For End If Next col If Not retain Then Rows(current).Delete Next current End Sub 

Excel工作表函数COUNTA是testing范围是否为空的干净方式。

 Sub delem() Dim lr As Long, r As Long lr = Cells(Rows.Count, "B").End(xlUp).Row For r = lr To 1 Step -1 'This function Counts the number of cells that are not empty If WorksheetFunction.CountA(Range(Cells(r, 3), Cells(r, 26)) = 0 Then Rows(r).Delete End If Next r End Sub