none
Linhas - Excluir 5 linhas consecutivas em intervalos de 56 linhas RRS feed

  • Pergunta

  • Boa tarde.

    Já pesquisei na internet, porém não encontrei uma macro do modo exato que eu preciso.

    Gostaria de uma macro que Excluísse linhas da planilha que tem um total de 2.851 linhas, mas do seguinte modo:

    - A partir da linha 56 da coluna A, que pode conter células preenchidas ou em branco, a macro a cada 56 linhas excluir 5 linhas, iniciando nas linhas 57,58,59,60,61.

    - a partir dai e mais 56 linhas adiante, na linha 113 a macro deletar novamente 5 linhas consecutivas (113,114...).

    - e assim sucessivamente até chegar ao final das linhas (2.851) preenchidas da planilha.

    Agradeço a ajuda.


    sexta-feira, 1 de agosto de 2014 18:02

Respostas

  • É verdade... esqueci de referenciar a célula para início.

    Sub apagar_linhas()
    Dim intLinha As Integer
    Range("A1").Offset(56, 0).Range("1:5").Select
    intLinha = 56
    Do Until ActiveCell.Value = ""
    Range("A1").Offset(intLinha, 0).Range("1:5").Select
    Selection.Delete Shift:=xlUp
    intLinha = intLinha + 56 - 5
    Loop
    
    End Sub


    Rafael Kamimura




    sexta-feira, 1 de agosto de 2014 20:05

Todas as Respostas

  • Olá Oscar:

    Teste esse código:

    Sub apagar_linhas()
    Dim intLinha As Integer
    
    intLinha = 56
    Do Until ActiveCell.Value = ""
    Range("A1").Offset(intLinha, 0).Range("1:5").Select
    Selection.Delete Shift:=xlUp
    intLinha = intLinha + 56 - 5
    Loop
    
    End Sub
    Ele vai executar o loop até chegar num linha vazia. Se você tem outro tipo de dado abaixo da linha 2.851 tem que adaptar o laço de repetição com um contador.


    Rafael Kamimura

    sexta-feira, 1 de agosto de 2014 19:27
  • Rafael.

    Não funcionou a sua macro. Não acontece nada ao clicar.

    Não será porque a ActiveCell= "" ? 

    Como informei anteriormente na coluna A tem células vazias e preenchidas.

    Em Range("A1").Offset(intLinha, 0).Range("1:5").Select, acho que teria que ser Range("A56"), pois é dai que deve iniciar a macro. Mas tentei substituir e também não aconteceu nada. 

    Também não entendi a sua ultima frase, pois intLinha= intLinha+56-5 não é um contador ?

    sexta-feira, 1 de agosto de 2014 19:58
  • É verdade... esqueci de referenciar a célula para início.

    Sub apagar_linhas()
    Dim intLinha As Integer
    Range("A1").Offset(56, 0).Range("1:5").Select
    intLinha = 56
    Do Until ActiveCell.Value = ""
    Range("A1").Offset(intLinha, 0).Range("1:5").Select
    Selection.Delete Shift:=xlUp
    intLinha = intLinha + 56 - 5
    Loop
    
    End Sub


    Rafael Kamimura




    sexta-feira, 1 de agosto de 2014 20:05
  • OK, Rafael.  Agora funcionou!

    Obrigado.

    sexta-feira, 1 de agosto de 2014 20:26
  • Que bom, só não esquece de marcar como resposta o meu comentário para fechar esse thread.

    Abraços!


    Rafael Kamimura

    sexta-feira, 1 de agosto de 2014 20:28
  • Algumas considerações

    1 - Utilize Long ao invés de Integer para representar o número de uma linha no Excel, pois Integer armazena um valor no máximo igual a 32767. Se você alcançar, durante o laço, uma linha de maior número que essa, obterá um erro do tipo Estouro.

    2 - Ao excluir linhas, prefira fazer laços decrescentes ao invés de crescentes para evitar fazer os desconfortáveis ajustes de variável de controle como representado em "intLinha = intLinha + 56 - 5".

    Uma possível solução:

    Sub pExcluirLinhas()
      Dim lRow As Long
      Dim lLast As Long
      Dim ws As Excel.Worksheet
      
      With ws
        lLast = .Cells(.Rows.Count, "A").End(xlUp).Row
        For lRow = lLast - 5 To 51 Step -56
          .Rows(lRow).Resize(5).Delete
        Next lRow
      End With
      
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 15 de agosto de 2014 10:55
    Moderador