Dicas de Excel #1 – Macro para excluir linhas na quantidade pedida

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.

6 comentários em “Dicas de Excel #1 – Macro para excluir linhas na quantidade pedida”

  1. Olá Reinaldo,

    Esta é a primeira vez que comento no seu site. Quero parabenizá-lo, tenho algum conhecimento em VBA e venho me aprimorando aqui!

    Há um tempo atrás criei uma rotina semelhante, só que no meu caso eu precisava excluir todas as linhas exceto um determinado número no fim da planilha. Para não ter que ficar indo ao final e selecionar todas as linhas indesejadas criei o código abaixo:

    Public Sub Apagar()
    Linhas = InputBox(“Quantas linhas devem permanecer?”)
    Célula = WorksheetFunction.CountA(Columns(“A”)) – Linhas
    Rows(“2:” & Célula).Select
    Selection.Delete Shift:=xlUp
    End Sub

    Este código mantém as linhas do cabeçalho e o número de linhas finais informado, excluindo todas as demais.

    Espero ter contribuído.

    Sucesso!

    Responder
  2. Como fazer para esta Macro para excluir linhas na quantidade pedida da última linha da tabela até ao número pedido.
    Nesta dica Dicas de “Excel #1 – Macro para excluir linhas na quantidade pedida”, a macro elimina a partir da 5ª linha, queria uma que eliminasse da
    34ª linha à quantidade pedida.
    Obrigado.

    Responder
    • Olá Sacramento.

      Veja que na linha 8 do código é possível informar a linha inicial, ou seja, a linha mais acima. No caso do exemplo a 5ª linha.
      Para você alterar para 34ª linha, pode fazer de duas maneiras. Assim:

      Digitando o valor 34 diretamente no código:
      iLinhaInicial = 34

      Ou

      Atribuindo o valor numa célula de referência, da mesma forma que fazemos para a contagem de linhas a excluir. Exemplo: Informe na célula B2 o valor 34 e altere o código para:
      iLinhaInicial = ActiveSheet.Range(“B2”).Value

      Abç

      Responder
  3. Acompanho todos os lançamentos enviados para o meu e-mail, no intuito de descobrir como agilizar uma planilha minha sobre contagem de estoque.
    O sistema me informa o estoque em unidades e o confronto com o estoque físico é em caixas. como são vendidas unidades, meu estoque contem caixas e fraçoes (unidades). Como posso solicitar ajuda?. Ja comprei até Seu livro em PDF dias atraz sobre fórmulas mas não encontrei a resposta.
    Agradeço ajuda.
    Mariano Dolinski

    Responder
    • Mariano,

      É mais simples do que você imagina.

      Suponha que na célula A2 esteja informado a capacidade de produtos numa embalagem, ou seja, quantos itens cabem dentro desta embalagem. E suponha, também, que na célula B2 esteja o total de itens deste produto em estoque, por unidade, é claro.

      Para descobrirmos a quantidade de embalagens completas, divida a quantidade de itens em estoque pela capacidade de cada embalagem e retorne apenas a parte inteira dessa operação:

      =INT(B2/A2)

      Para descobrirmos a quantidade fracionada, ou seja, os itens das embalagens incompletas, ou já, abertas, faremos a subtração do total de itens em estoque pela multiplicação do total de caixas completas com a capacidade de cada embalagem. Assim:

      =B2 – INT(B2/A2)*A2

      Espero que ajude.

      Responder

Deixe um comentário