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

julho 29th, 2008 by Tomás Vásquez

É 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:

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:

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 veficaçõ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