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.
microsoft-excel
vba
macros
Alex Martin
fonte
fonte
For i = lastRow to 1 step -1
Respostas:
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.
fonte