Olá Nathalia, tudo bem? Espero que sim!
O que está acontecendo no código é que você está deletando células que estão passando pelo For, e ao deletá-las, o código não irá detectar o zero logo abaixo de um zero que foi deletado. Vamos utilizar um exemplo para que fique mais claro o que está acontecendo:
Suponha que tenha uma linha de zeros nas linhas 10 e 11. O código irá detectar que existe um 0 na linha 10 através da função analisarLinha. A linha inteira será selecionada e deletada. Portanto, todas as linhas abaixo da linha 10 irão subir para preencher o espaço vazio que a linha 10 deixou. Portanto, a linha 11 se tornará a 10, a linha 12 se tornará a 11 e assim por diante. Porém, o For não irá executar mais a linha 10 e partirá para a linha 11 que não mais tem um 0, uma vez que ele subiu para a linha 10.
Dessa forma dois zeros subsequentes não serão eliminados através do código que criou, já que estamos tirando elementos do próprio iterador do For.
Encontrei uma solução para o problema sem que seja necessário executar a macro mais de uma vez. Talvez não seja a melhor forma de solucionar o problema, porém funciona. Criei uma função responsável para contar a quantidade de zeros antes que sejam deletados e utilizei um For para executar um bloco de código que se repita a quantidade de zeros que existem.
O For interno, irá percorrer o intervalo já utilizado por você até detectar um zero, deletando a linha que possui esse zero. Utilizei o comando Exit For para sair do For caso esse 0 seja encontrado e deletado. Dessa forma o intervalo será percorrido desde o início novamente, eliminando o problema que havia em não verificar a linha subsequente.
O código que utilizei foi o seguinte:
Sub tirarZeros()
Dim range1, cell As Range
Sheets("Sheet1").Activate
Set range1 = Range("A1:A200")
Contador = contaZeros(range1)
For i = 0 To Contador
For Each cell In range1
If analisarLinha(cell) Then
cell.Offset(0, 6).Rows.Select
Selection.EntireRow.Delete
Exit For
End If
Next
Next
End Sub
Function analisarLinha(ByVal cell As Range) As Boolean
If cell.Offset(0, 6).Value = 0 And cell.Offset(0, 7).Value = 0 Then
analisarLinha = True
End If
End Function
Function contaZeros(ByVal cells As Range) As Integer
Cont = 0
For Each cell In cells
If cell.Offset(0, 6).Value = 0 And cell.Offset(0, 7).Value = 0 Then
Cont = Cont + 1
End If
Next
contaZeros = Cont
End Function
Espero que tenha tirado sua dúvida.
Estou à disposição. Bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!