2015-06-27 256 views
1

我在查看是否有更高效的方式来实现下面的结果,因此可以根据需要进行扩展。使用VBA删除空行 - MS Excel

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

自从我使用VBA以来已经有一段时间了,我在网上找到了下面的代码。 (因为问题电子表格中的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 

谢谢!

回答

2

只需添加一个内部循环来遍历您关心的列。这实际上运行得更快,因为VBA不会短路If语句(所有条件都被评估)。但随着循环,您可以提前退出,如果你发现任何地方的值:

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 
+0

工作的魅力,似乎工作速度一样快,有像3000行摆脱所以不期待它在闪光灯!但它看起来更清洁,那就是我之后:) –

0

Excel工作表函数COUNTA是测试如果一个范围是空的清洁方式。

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