Excel VBA – Excluir linhas de acordo com um critério

É impressionante a quantidade de vezes que vejo esse tipo de dúvida nos fóruns que frequento.

Várias soluções já foram postadas para resolver o problema, mas cada uma mais particular que a outra. Vejam bem, não disse que as soluções eram ruins, mas sim que atendiam somente a uma determinada necessidade.

Pois bem, com base nisso, decidi gastar um tempinho escrevendo uma macro que tenta resolver o problema de forma genérica. Para se ter uma idéia, dêem uma olhada no seguinte código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function ExcluiLinhasPorCriterio(ByVal linhaInicial As Integer, ByVal linhaFinal As Integer, ByVal colunaCriterio As Integer, ByVal criterio As String) As Integer
    Dim linhasExcluidas As Integer
    Dim i As Integer
    linhasExcluidas = 0
    With ActiveSheet
        i = linhaInicial
        While i < linhaFinal
            If CStr(.Cells(i, colunaCriterio).Value) = criterio Then
                .Rows(i).Delete
                linhasExcluidas = linhasExcluidas + 1
            Else
                i = i + 1
            End If
        Wend
    End With
    ExcluiLinhasPorCriterio = linhasExcluidas
End Function

O que ele faz efetivamente é, receber 4 parâmetros, sendo eles:

  • o índice da linha inicial de busca
  • o índice da linha final de busca
  • o índice da coluna onde se deve buscar o critério
  • o valor do critério no formato de string

Recebendo estes parâmetros, ele varre as linhas da planilha ativa a partir do índice da linha inicial até o índice da linha final e em cada linha que passa, compara o valor na coluna cujo o índice também é informado com o parâmetro critério.Por fim, a função retorna quantas linhas foram excluídas no processo.

O código abaixo faz uma chamada de exemplo para a função:

1
2
3
Sub Executa()
    MsgBox "Foram excluídas " & ExcluiLinhasPorCriterio(1, 200, 6, "London") & " linhas"
End Sub

O que exatamente esta chamada está fazendo é, ler na planilha atual da linha 1 até a 200, sendo que, quando a coluna 6 ou F tiver o valor “London”, esta será excluída.

É bom ter ciência de que o código não faz validações sobre como a lista de dados está montada. Também não está previsto em um primeito momento verificações como ranges de dados, valores numéricos ou de data, funcionalidades estas que podem ser implementadas ao longo do tempo para melhorar a função. Portando, cabe a cada um implementar as verificações necessárias para sua necessidade.

Abraços e bom proveito!

Tomás Vásquez
www.tomasvasquez.com.br