2015-06-27 132 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