Несколько вариантов при использовании IF для удаления в конце - PullRequest
0 голосов
/ 22 октября 2018

У меня есть следующие два столбца (упрощенно)

Bond   BMW
Equity Amazon
Bond   Netflix
Bond   Uber
Equity Google

Мне нужен код, который в основном проходит через первый столбец и удаляет строку, если это Equity.

Моя идея (в терминах цикла for):

for i = 1 to 5
if ws.Cells(i,1).Value = "Bond" Then
Else 
ws.Rows(i).Select
End If 
Next i
Selection.Delete
End Sub

Проблема, которую я заметил, заключается в том, что удаляется только последняя выбранная ячейка.Я бы подумал, что все ячейки, которые я выбрал в цикле, будут выбраны.Есть ли конкретный способ выбрать несколько.(Union не будет работать в этом случае, так как список будет динамическим).

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Чтобы свести к минимуму активность с листом, попробуйте вот так:

Sub Button2_Click()
    Dim DeleteRange As Range
    Dim LstRw As Long, x As Long

    LstRw = Cells(Rows.Count, "A").End(xlUp).Row

    For x = 1 To LstRw

        If Cells(x, "A").Value = "Equity" Then

            If DeleteRange Is Nothing Then
                Set DeleteRange = Rows(x)
            Else
                Set DeleteRange = Union(DeleteRange, Rows(x))
            End If

        End If

    Next x

    If Not (DeleteRange Is Nothing) Then
        DeleteRange.EntireRow.Delete
    End If

End Sub

Также нет необходимости повторять в обратном порядке, так как удаление выполняется в конце.

0 голосов
/ 22 октября 2018

Обычно при удалении строк вы начинаете снизу и двигаетесь вверх.

Sub Button2_Click()
    Dim LstRw As Long, x

    LstRw = Cells(Rows.Count, "A").End(xlUp).Row

    For x = LstRw To 1 Step -1

        If Cells(x, "A").Value = "Equity" Then

            Cells(x, "A").EntireRow.Delete

        End If

    Next x

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...