2015-07-13 65 views
0

好了,所以這裏是我的工作設置錶行:宏在Excel中刪除包含全0

enter image description here

我需要一個宏刪除包含四個0的行,唯一的辦法我能想到的此刻需要的細胞是空的,即「」

0是否真正算作一個字符串或數字或者是它等同於「」?

我認爲這個問題可能與這樣的事實,我的一些0的都是文本字符串和其他人的數字,我只是沒想到這會事宜。

+0

所以你想刪除行2.4.5.9.10? –

+0

我只想寫一個循環,通過每一行去,並刪除它,如果細胞的總和= 0 – Jared

回答

0

在這裏,我得到了一個給你。試試這個。

Public Sub removeRow() 

    Dim row As Integer 

    'Set the start row. 
    row = 1 

    'Loop all row from sheet until colum "A" cell is blank 
    Do While Sheets("sheetname").Range("A" & row) <> "" 

     'If all cell are 0. 
     If Sheets("sheetname").Range("A" & row) = 0 And Sheets("sheetname").Range("B" & row) = 0 And Sheets("sheetname").Range("C" & row) = 0 And Sheets("sheetname").Range("D" & row) = 0 Then 

      'Delete entire row 
      Sheets("sheetname").Range("A" & row).EntireRow.Delete 

     Else 

      'Increse row 
      row = row + 1 

     End If 

    Loop 

End Sub 
+0

我得到運行時錯誤「13」:類型不匹配。上線'不要當表(「發佈」),範圍(「A」&行)<>「' –

+0

我得downvote這個答案。通過而不是落後與循環前進,這個代碼將跳過任何在這個例子中,這段代碼會丟失(而不是刪除)第5行和第10行。 – TMH8885

+1

是的,我修改了我的錯誤代碼,現在它工作的很好,謝謝你的建議。 –

0

試試這個小宏.....它會檢查每行的部分的總和:

Sub RowKiller() 
    Dim N As Long, i As Long, wf As WorksheetFunction 
    Dim rng As Range 
    N = Cells(Rows.Count, "A").End(xlUp).Row 
    Set wf = Application.WorksheetFunction 

    For i = N To 2 Step -1 
     Set rng = Range(Cells(i, 1), Cells(i, 4)) 
     If wf.Sum(rng) = 0 Then 
      rng.EntireRow.Delete 
     End If 
    Next i 
End Sub 
+0

運行時錯誤'1004':無法獲取WorksheetFunction類的Sum屬性 –

0

創建行的字符串,刪除然後做一件刪除。當你做這種方式無需向後輪詢,它應該是很多不是按照行刪除行更快:

Sub DeleteRows() 
Dim i As Long, DelRange As String 
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'Doesn't matter which way you go when you delete in one go 
    If CLng(Cells(i, 1)) = 0 And CLng(Cells(i, 2)) = 0 And CLng(Cells(i, 3)) = 0 And CLng(Cells(i, 4)) = 0 Then DelRange = DelRange & "," & i & ":" & i 
Next i 
Range(Right(DelRange, Len(DelRange) - 1)).Delete 
End Sub 

二手CLng函數的字符串零轉換爲長期零供測試。

警告的小字雖然,CLng函數(activecell)將於如果activecell爲空,因此空行也將被刪除,返回0。

編輯:遇到字符串時,在測試則IsNumeric把應對錯誤(不能CLng函數真正的字符串)

Sub DeleteRows() 
Dim i As Long, DelRange As String 
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'Doesn't matter which way you go when you delete in one go 
    If IsNumeric(Cells(i, 1)) And IsNumeric(Cells(i, 2)) And IsNumeric(Cells(i, 3)) And IsNumeric(Cells(i, 4)) Then 
     If CLng(Cells(i, 1)) = 0 And CLng(Cells(i, 2)) = 0 And CLng(Cells(i, 3)) = 0 And CLng(Cells(i, 4)) = 0 Then DelRange = DelRange & "," & i & ":" & i 
    End If 
Next i 
Range(Right(DelRange, Len(DelRange) - 1)).Delete 
End Sub