Linhas do Excel que devem ser excluídas não estão sendo excluídas

1

Criei uma macro que destaca uma linha se o valor em uma célula de uma planilha não existir em outra planilha e exclua a linha se o valor existir nos dois locais. Mas, por algum motivo, ele não exclui todas as linhas necessárias na primeira passagem.

Se eu continuar iniciando a macro, ela excluirá todas as linhas que desejo remover, mas por que não ocorre durante a primeira passagem?

Sub ActivityRegNonMembers()

    Dim lastRow As Integer
    Dim rng As Range
    lastRow = Sheets("Program Participants").Range("A1").SpecialCells(xlCellTypeLastCell).Row
    Application.ScreenUpdating = False
    For i = 1 To lastRow
        Set rng = Sheets("Current Members").Range("C:C").Find(Sheets("Program Participants").Cells(i, 18))
        If rng Is Nothing Then
            Sheets("Program Participants").Cells(i, 18).EntireRow.Interior.Color = vbYellow
        End If
        If Not rng Is Nothing Then
            Sheets("Program Participants").Rows(i).EntireRow.Delete
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

Qualquer ajuda seria apreciada.

Alex Martin
fonte
2
loop para trásFor i = lastRow to 1 step -1
Scott Craner 10/11/16

Respostas:

1

Quando você exclui uma linha (por exemplo, 15), a próxima linha (originalmente 16) agora se torna a linha 15. Em seguida, você incrementa i para 16 (que é o original 17) e, assim, pula o original 16. Portanto, a qualquer momento, você tem dois linhas consecutivas a serem excluídas, você perderá a segunda. Uma solução é adicionar i = i - 1 depois de excluir uma linha. Em seguida, o loop for será incrementado de volta para onde você precisa estar.

Benjamin
fonte