Olá pessoas Excelentes!

A dica de hoje é super fácil e rápida. Resolvi disponibilizá-la aqui para todos vocês após responder um comentário deixado no post  Exibindo uma barra de progresso numa macro VBA.

Como a pergunta não aborda especificamente o tema do artigo em questão, achei interessante escrevê-lo separadamente para ficar mais visível a todos os leitores.

Bom. A questão solicitava uma rotina VBA que permitisse a exclusão de uma determinada quantidade de linhas de uma planilha conforme fosse informada pelo usuário digitando-se essa quantidade numa célula qualquer.

Por exemplo, o usuário digita na célula A2 o número 15. A macro excluiria 15 linhas da planilha.

Fiquei pensando uma aplicação prática para esta macro, de modo que pudesse explicar melhor a vocês o seu uso. Confesso que não pensei nada tão especial, mas como sempre digo: da necessidade que geramos as soluções.

Sei que já utilizei algumas vezes e pode ser muito útil para vocês. Vejamos o código da macro.

Programando a Macro de Exclusão de Linhas

Você vai perceber no código a seguir que para conseguirmos excluir as linhas uma a uma, precisamos ficar atentos a um detalhe na implementação do algoritmo para obtermos sucesso.

O laço For..Next é aplicado invertido, ou seja, o contador vai do número maior para o menor. Para conseguir fazer isto, incluímos a instrução Step -1.

 

Por quê o loop é invertido?

Experimente fazê-lo da maneira convencional. Da linha inicial até a última linha.

Você vai notar que várias linhas não serão apagadas e outras que não deveriam ser excluídas, serão.

A razão é que ao excluir a linha 1 por exemplo, automaticamente a linha 2 assume a posição da linha anterior. Ou seja, a linha 2 agora é linha 1. Com isso, a macro ainda está programada para excluir a linha 2, só que a posição 2 já está ocupada pela linha 3. Resultado as linhas serão sempre puladas em uma unidade e não serão apagadas corretamente.

 

Mas, vamos ao código.

 

Insira um módulo (ALT+F11) e digite o código abaixo.

 

Sub Exclusao()
Dim i As Long
Dim iQuantidadeLinhas As Long
Dim iLinhaInicial As Long
Dim iLinhaFinal As Long

    iQuantidadeLinhas = ActiveSheet.Range("A2").Value
    iLinhaInicial = 5
    iLinhaFinal = iLinhaInicial + iQuantidadeLinhas - 1

    For i = iLinhaFinal To iLinhaInicial Step -1
        ActiveSheet.Cells(i, 1).EntireRow.Delete
    Next i

    MsgBox iQuantidadeLinhas & " linhas excluídas.", vbInformation
End Sub

 

Então essa foi a dica de hoje. Quem gostou, compartilha no twitter, facebook, google+ ok…

 

Um abraço galera.

Antes de efetuar o download do arquivo de exemplo, convido você a socializar conosco.

Escolha uma das opções abaixo. Seguir no twitter, assinar nossa Newsletter...

Isso nos ajuda na divulgação do site e te permite ficar sempre atualizado das novidades. Fico muito grato pela sua colaboração.

Digite seu email:

Você receberá um email para ativar o cadastro, ok!