Excel中的宏删除包含全0的

时间:2015-07-13 12:23:59

标签: string excel excel-vba rows vba

好的,这是我正在使用的表格设置:

enter image description here

我需要一个宏来删除包含四个0的行,我现在想到的唯一方法是要求单元格为空,即“”

0实际上算作字符串或数字还是相当于“”?

我认为问题可能与我的一些0是文本字符串而另一些是数字这一事实有关,我只是觉得这不重要。

3 个答案:

答案 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

答案 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

答案 2 :(得分: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)将返回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