Excel VBA: удалить строки, если значение не равно значению? - PullRequest
0 голосов
/ 21 ноября 2018

Так что я долго искал, чтобы выяснить, почему мой код не работал, но каждый раз, когда я пытаюсь, я получаю результат, где ничего не меняется.Может кто-нибудь сказать мне, что мне не хватает?Извините, я новичок, но я пытаюсь.

   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 голосов
/ 21 ноября 2018

Не проверено, но может быть что-то вроде:

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, чтобы построить диапазон, состоящий из всех строк, которые нужно удалить, а затем удалить их в однойидти.

0 голосов
/ 21 ноября 2018

Вместо зацикливания используйте превосходные встроенные функции, более понятный и лаконичный.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...