Excel VBA:如果值不等于值,则删除行?

时间:2018-11-21 19:58:26

标签: excel vba excel-vba

所以我一直在努力寻找为什么我的代码无法正常工作的原因,但是每次尝试时,我得到的结果是什么都没有改变。有人可以告诉我我所缺少的吗?抱歉,我是一个新手,但我正在尝试。

   Dim Cell As Range

With Sheets(1)
    ' loop column D until last cell with value (not entire column)
    For Each Cell In .Range("D2:D" & .Cells(.Rows.Count, "D").End(xlUp).Row)
        If Cell.Value <> 110 Then
            Rows(Cell.Row).EntireRow.Delete
        End If
    Next Cell
End With

2 个答案:

答案 0 :(得分:3)

不是循环,而是使用卓越的内置函数,它更简洁,更简洁。

With Sheets(1).UsedRange
    .AutoFilter Field:=4, Criteria1:="<>110"
    .Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    .AutoFilter
End With

如果您坚持循环,请使用以下代码:

With Sheets(1).UsedRange
    For lrow = .Rows.Count To 2 Step -1
        If .Cells(lrow, 4).Value <> 110 Then .Rows(lrow).Delete
    Next lrow
End With

答案 1 :(得分:1)

未经测试,但可能类似于:

Option explicit

Sub DeleteRows()

With thisworkbook.worksheets(1)
    ' loop column D until last cell with value (not entire column)

Dim lastRow as long
lastRow = .Cells(.Rows.Count, "D").End(xlUp).Row

Dim rowIndex as long
For rowIndex = lastRow to 2 step -1

If .cells(rowIndex, "D").value2 <> 110 then
.cells(rowIndex, "D").entirerow.delete
End if

Next rowIndex

End With

End sub

如果有很多行,则可以使用union来建立一个包含要删除的所有行的范围,然后一次性删除它们。