簡體   English   中英

Excel中的宏以刪除包含全0的行

[英]Macro in Excel to remove rows containing all 0's

好的,這是我正在使用的表設置:

在此處輸入圖片說明

我需要一個宏來刪除包含四個0的行,此刻我能想到的唯一方法是將單元格為空,即“”

0實際算作字符串還是數字,或者等於“”?

我認為問題可能與以下事實有關:我的一些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

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

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

創建要刪除的行字符串,然后執行一次刪除。 用這種方法進行時無需向后輪詢,而且比逐行刪除要快很多:

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將字符串零轉換為測試的Long零。

提醒一下,如果活動單元為空白,則CLng(activecell)將返回0,因此空白行也將被刪除。

編輯:遇到字符串時,輸入IsNumeric測試以應對錯誤(無法捕獲真實字符串)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM