Notifications
Clear all

Excluir linhas

13 Posts
2 Usuários
0 Reactions
2,224 Visualizações
(@arihern)
Posts: 33
Eminent Member
Topic starter
 

Pessoal,

preciso de uma macro que quando eu rodar ela faça "se célula X estiver em branco (sem dados) excluir a linha"

Porque trabalho com um formato em que celula A1 esta preenchida, A2 e A3 não, A4 Sim, A5 sim... isso varia muito é claro, mas é ruim ter que ficar selecionando um monte de linhas e excluindo!

Como faço?

Um abraço!

 
Postado : 07/11/2014 1:11 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Talvez isso.

Public Sub AleVBA_13456()
Dim rng As Range
Dim res As Boolean
Dim i, j As Integer
j = 0
    For Each rng In Range("A1:A9000")
    j = j + 1
    res = rng.Value Like ""
        If res Then
            Rows(j).Delete
        End If
    Next
End Sub

Ou tente assim...

Public Sub AleVBA_13456()
Dim LstRw As Long, Rw As Long
LstRw = Cells(Rows.Count, "A").End(xlUp).Row
    For Rw = LstRw To 2 Step -1
      If Cells(Rw, "A").Value = "" Then Rows(Rw).Delete
    Next Rw
End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 07/11/2014 1:31 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Uma outra sugestão:

Estou considerando que A1 é a linha de cabeçalho, e não queremos apaga-la, se não for isto é só ajustar na rotina de A2 para A1.

Sub ExcluiLinhas()
    
    Dim UltimaLin As Long
    
    'Captura a Ultima Linha na Coluna A
    UltimaLin = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
    
    'Apaga todas as Linhas em branco a partir de A2
    ActiveSheet.Range("A2:A" & UltimaLin).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 07/11/2014 7:24 pm
(@arihern)
Posts: 33
Eminent Member
Topic starter
 

Legal, é isso mesmo!
Só tem um problema.. estou usando esse código

Sub ExcluiLinhas()

Dim UltimaLin As Long

'Captura a Ultima Linha na Coluna A
UltimaLin = ActiveSheet.Cells(Rows.Count, "H;G").End(xlUp).Row

'Apaga todas as Linhas em branco a partir de A2
ActiveSheet.Range("H8;G8:H;G" & UltimaLin).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

Porque na verdade preciso do seguinte: se tiver uma célula na coluna H ou G ou nas duas em branco (a partir da linha 8) excluir a linha..
Mas ta dando erro! o que tem de errado?

 
Postado : 08/11/2014 6:03 am
(@arihern)
Posts: 33
Eminent Member
Topic starter
 

Na verdade, para a linha ser excluida As células de G e H tem que estar em branco! se uma das duas estiver preenchida, ele não pode excluir!

 
Postado : 08/11/2014 7:29 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Na verdade o problema foi sua solicitação se referir a uma coisa e agora que r outra, se já no primeiro post tivesse colocado o que realmente pretendia teria tido a resposta certa para sua questão, você pediu :
preciso de uma macro que quando eu rodar ela faça "se célula X estiver em branco (sem dados) excluir a linha"
em que celula A1 esta preenchida, A2 e A3 não, A4 Sim, A5 sim... i

E se referiu a Coluna A, portanto todas as respostas servem e se referiram ao que solicitou, ou seja não há nenhum problema com elas.

Só que achei um pouco confuso oque pediu agora :
1°) se tiver uma célula na coluna H ou G ou nas duas em branco (a partir da linha 8) excluir a linha,
e depois disse :
Na verdade, para a linha ser excluida As células de G e H tem que estar em branco! se uma das duas estiver preenchida, ele não pode excluir!

Resumindo sua solicitação :
Se H = Vazia e G = Valor : excluir ?
Se G = Vazia e H = Valor : excluir ?
Se H e G = Vazia : excluir ?

E onde entra a Coluna "A" em sua solicitação ?

A rotina abaixo irá verificar se G e H estão em Branco e excluir a linha.

Sub CompararColunasVazias()
    Dim i As Range
    Dim UltimaLin As Long
    
    'Captura a Ultima Linha na Coluna G
    UltimaLin = ActiveSheet.Cells(Rows.Count, "G").End(xlUp).Row + 1
    
    'Loop para varrer toda a coluna 1
    For Each i In Range("G8:G" & UltimaLin) 'Altere para as células que deseja
        
        'Verifica e compara se G e H estão vazias
        If i.Value = "" And i.Offset(0, 1).Value = "" Then
            
            'Se sim, Deleta a Linha
            i.EntireRow.Delete
        
        End If
        
    Next i
        
End Sub

Se não for isto, detalhe melhor ou anexe um modelo reduzido e compactado com o resultado que pretende.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 08/11/2014 9:35 am
(@arihern)
Posts: 33
Eminent Member
Topic starter
 

Opa, peço desculpas pela confusão!

A linha só pode ser excluida se a celula desta linha na coluna G e H estiverem vazias! se uma delas estiver preenchida, não pode excluir!

Então, se as duas células das colunas G e H (Ex. G8 e H8) estiverem vazias, Excluir linha inteira!

Lembrando que ele tem que excluir a partir da linha 8, porque as outras linhas são o Titulo e outras informações...

 
Postado : 10/11/2014 11:22 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Opa, peço desculpas pela confusão!
A linha só pode ser excluida se a celula desta linha na coluna G e H estiverem vazias! se uma delas estiver preenchida, não pode excluir!
Então, se as duas células das colunas G e H (Ex. G8 e H8) estiverem vazias, Excluir linha inteira!
Lembrando que ele tem que excluir a partir da linha 8, porque as outras linhas são o Titulo e outras informações...

É justamente o que faz a última rotina que postei, compara G com H e se as duas estiverem vazias exclui a linha, e a verificação é a partir da linha 8.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 10/11/2014 3:22 pm
(@arihern)
Posts: 33
Eminent Member
Topic starter
 

Deu certo, o unico problema que que depois de executar ele diz essa mensagem: Erro em tempo de execução '13': Tipos incompatíveis!

Sabe o que possa ser?

 
Postado : 10/11/2014 3:43 pm
(@arihern)
Posts: 33
Eminent Member
Topic starter
 

Fiz mais alguns testes e nem todas as linhas em que a célula esta vazia são excluidas...

 
Postado : 10/11/2014 3:47 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fiz mais alguns testes e nem todas as linhas em que a célula esta vazia são excluidas...

Arihern, o equivoco foi meu, é que havia feito meio correndo e testei sem deletar a linha só colorindo, e me esqueci que como na rotina que passei estamos trabalhando com Loop no Range, se tivermos linhas em Brancos seguidas ao localizar a primeira e deletar a segunda passa a ser a primeira, por exemplo :
Se G10 e H10 o valor for Vazia a rotina Deleta a Linha 10, e se as Celulas seguintes (G11 e H11) tambem forem vazias a rotina irá pular uma vez que deletamos a linha e G11 e H11 e ela passou para a linha de cima, ou seja estão em G10 e H10, então para contornarmos esta situação, uma vez que queremos DELETAR as linhas, devemos instruir a Rotina para fazer o inverso, ou seja começar de Baixo para Cima, então segue uma nova versão, faça os testes e veja se agora acertamos.
Só explicando, na Instrução:
For i = UltimaLin To 8 Step -1
Significa da Última Linha até chegar na Linha 8, o -1 é para inverter a ordem e começar de Baixo para Cima.

Sub CompararCelulasVaziasDeBaixoParaCima()
    Dim i
    Dim UltimaLin As Long
    
    'Captura a Ultima Linha na Coluna G
    UltimaLin = ActiveSheet.Cells(Rows.Count, "G").End(xlUp).Row + 1
    
    'Loop para varrer toda a coluna 7 (G)
    'Faz o Loop no sentido contrário : De baixo para Cima
    For i = UltimaLin To 8 Step -1
        
        'Verifica se G e H são vazias
        If Cells(i, 7).Value = "" And Cells(i, 8).Value = "" Then
            'Se sim Deleta a linha
            Cells(i, 1).EntireRow.Delete
        End If
        
    Next i
        
End Sub

Uma Obs, estamos comparando celulas Vazias, se tivermos formulas a rotina não interpretará como Vazia.

[]

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 10/11/2014 7:28 pm
(@arihern)
Posts: 33
Eminent Member
Topic starter
 

Opa Mauro,

Realmente, não tinha percebido isso também! agora parece estar tudo certo, o unico problema é que não esta excluindo! rsrs diz erro em tempo de execução 13.. o excel aponta que o erro esta nesta linha

If Cells(i, 7).Value = "" And Cells(i, 8).Value = "" Then

Sabe me dizer como posso resolver?

Agradeço a ajuda! xD

 
Postado : 18/11/2014 2:13 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ari, a lógica na rotina está correta, para ter certeza de onde está vindo o erro, só analisando o seu modelo, pois nos testes que fiz em um exemplo qualquer não da o erro que você citou.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/11/2014 4:00 pm