Удалить строку, когда ячейка не равна строке в массиве - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь l oop через массив и, когда он находит ячейку, которая не равна заданному c значению, он удаляет всю строку. Вот код:

Sub DeleteTest()

Dim crr()

crr = Range("A3:A1000")

For i = LBound(crr, 1) To UBound(crr, 1)
    If (crr(i, 1) <> "One" And crr(i, 1) <> "Two") Then
       ' Line to delete the row in which the value of the cell is not One or Two

    End If
Next

End Sub

Я знаю, что я также могу сделать это с автофильтром, но я хотел бы знать, как это сделать с массивом.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Вот один из способов:

Sub DeleteTest()

    Dim rng As Range, crr(), i As Long

    Set rng = Range("A3:A1000")
    crr = rng.Value

    For i = UBound(crr, 1) To LBound(crr, 1) Step -1 '<<< loop backwards
        If (crr(i, 1) <> "One" And crr(i, 1) <> "Two") Then
           rng.Cells(i).EntireRow.Delete
        End If
    Next

End Sub
0 голосов
/ 05 апреля 2020

Попробуйте этот код

Sub Test()
Dim x, r As Range
With ThisWorkbook.Sheets("Sheet1")
    Set r = .Range("A3:A1000")
    x = Filter(.Evaluate("TRANSPOSE(IF((" & r.Address & "=""One"")+(" & r.Address & "=""Two""),""A"" & ROW(" & r.Address & ")))"), False, False)
    If UBound(x) = -1 Then Exit Sub
    .Range(Join(x, ",")).EntireRow.Hidden = True
    On Error Resume Next
        r.SpecialCells(xlCellTypeVisible).EntireRow.Delete
    On Error GoTo 0
    .Rows.Hidden = False
End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...