Usuário com melhor resposta
Linhas - Excluir 5 linhas consecutivas em intervalos de 56 linhas

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.
- Editado Oscar A D Jung sexta-feira, 1 de agosto de 2014 18:03
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
- Editado Rafael Kamimura sexta-feira, 1 de agosto de 2014 20:08
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator segunda-feira, 4 de agosto de 2014 21:27
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
-
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 ?
-
É 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
- Editado Rafael Kamimura sexta-feira, 1 de agosto de 2014 20:08
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator segunda-feira, 4 de agosto de 2014 21:27
-
-
Que bom, só não esquece de marcar como resposta o meu comentário para fechar esse thread.
Abraços!
Rafael Kamimura
- Marcado como Resposta Oscar A D Jung sexta-feira, 1 de agosto de 2014 22:22
- Não Marcado como Resposta Felipe Costa GualbertoMVP, Moderator segunda-feira, 4 de agosto de 2014 21:27
-
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