VBA Excel - 当列中的单元格值等于零时删除行

时间:2017-02-24 10:33:40

标签: excel vba excel-vba

我的VBA脚本中有一些代码,当行的相应B列的值等于零时,该代码应该删除整行。不幸的是,我一直在使用的代码行并没有完全按照我想要的方式执行,因为如果相应行中的任何单元格等于零,它会删除整行。 这是迄今为止的代码:

With Worksheets("Sheet2")
For myloop = .Range("B10000").End(xlUp).Row To 1 Step -1
    If .Cells(myloop, 4).Value = 0 Then .Rows(myloop).EntireRow.Delete
Next myloop
End With

例如,我有一行,其中D列中的单元格等于零,即使B列中单元格的值不为零,此代码也会删除整行。如何更改代码,以便它实际上只扫描B列中的条目?

任何帮助都表示赞赏,并提前致谢。

2 个答案:

答案 0 :(得分:1)

用户gizlmo提供了答案:

.Cells(myloop, 4).Value更改为.Cells(myloop, 2).Value

答案 1 :(得分:1)

AutoFilter()方法如下:

With Worksheets("Sheet2") '<--| reference your shet
    With .Range("B1", .Cells(Rows.Count, "B").End(xlUp)) '<--| reference its column B range from row 1 (header) down to last not empty row
        If WorksheetFunction.CountBlank(.Cells) + WorksheetFunction.CountIf(.Cells, 0) = 0 Then Exit Sub '<--| exit of no empty or "zero" cells
        .AutoFilter Field:=1, Criteria1:=0, Operator:=xlOr, Criteria2:=""  '<--| filter column B cells with "0" content
         .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete '<--| if any filtered cell other than headers then delete their entire rows
    End With
    .AutoFilterMode = False
End With