Fórum Excel Bácico, Avançado e Vba

Este fórum é destina a usuário de Excel, que queiram compartilhar informações a básicas, avançadas e programação em VBA...
 
InícioInício  FAQFAQ  BuscarBuscar  MembrosMembros  GruposGrupos  Registrar-seRegistrar-se  Login  

Compartilhe | 
 

 Macro para apagar linhas repetidas

Ver o tópico anterior Ver o tópico seguinte Ir em baixo 
AutorMensagem
pathfinder73



Mensagens : 30
Data de inscrição : 24/08/2012

MensagemAssunto: Macro para apagar linhas repetidas   Qui Dez 04, 2014 1:29 am

Boa noite,

Estou tentando criar um macro em Excel.

Idéia:
1. Localizar a última linha da planilha
2. Posicionar na célula na primeira coluna da última linha
3. Validar o texto da célula. Se for um determinado texto, apagar a linha. Se não for, validar a célula da coluna ao lado. Se for um determinado valor, apagar a linha. Se não for, posicionar na célula na linha naterior, na primeira coluna.
4. Executar o loop até atingir a linha 16.


O que digitei e deu errado até gora foi isso (sem os underlines, claro):

For i = Cells(Rows.Count, "A").End(xlUp).Row To 16 Step -1
___Range(i, 1).Select
___If ActiveCell.Value = "POSIÇÃO GERAL DO CLIENTE" Then
______ActiveCell.EntireRow.Delete
___Else
______Range(i, 2).Select
______If ActiveCell.Value = "Data Base:" Then
_________ActiveCell.EntireRow.Delete
______End If
___End If
Next i
Voltar ao Topo Ir em baixo
Ver perfil do usuário
alexandrevba



Mensagens : 1820
Data de inscrição : 13/07/2011
Localização : Serra - ES

MensagemAssunto: Re: Macro para apagar linhas repetidas   Qui Dez 04, 2014 3:28 pm

Bom dia!!

Uma forma não atraente seria:
Código:
Sub AleVBA_951()
    Dim c As Range
    Dim SrchRng As Range
    Dim SrchStr As String
   
   
    Set SrchRng = ActiveSheet.Range("A16", ActiveSheet.Range("A65536").End(xlUp))
    SrchStr = "POSIÇÃO GERAL DO CLIENTE"
    Do
        Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing

    'Parte2
    Set SrchRng = ActiveSheet.Range("B16", ActiveSheet.Range("B65536").End(xlUp))
    SrchStr = "Data Base:"
    Do
        Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing
   
   
End Sub
Citação :
Se não for, posicionar na célula na linha naterior, na primeira coluna.
eu não entendi.
Att
Voltar ao Topo Ir em baixo
Ver perfil do usuário
pathfinder73



Mensagens : 30
Data de inscrição : 24/08/2012

MensagemAssunto: Macro para apagar linhas repetidas   Qui Dez 04, 2014 4:04 pm

Ops... digitei mesmo errado... é assim:

Idéia:
1. Localizar a última linha da planilha
2. Posicionar na célula na primeira coluna da última linha
3. Validar o texto da célula. Se for um determinado texto, apagar a linha. Se não for, validar a célula da coluna ao lado. Se for um determinado valor, apagar a linha.
4. Posicionar na célula da linha anterior, na primeira coluna.
4. Executar o loop até atingir a linha 16.

É possível de outra forma referenciar um Range usando o valor de uma variável? Pensei em criar uma string para referenciar o Range, mas como adicionar aspas no conteúdo da string?


alexandrevba escreveu:
Bom dia!!

Uma forma não atraente seria:
Código:
Sub AleVBA_951()
    Dim c As Range
    Dim SrchRng As Range
    Dim SrchStr As String
    
    
    Set SrchRng = ActiveSheet.Range("A16", ActiveSheet.Range("A65536").End(xlUp))
    SrchStr = "POSIÇÃO GERAL DO CLIENTE"
    Do
        Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing

     'Parte2
    Set SrchRng = ActiveSheet.Range("B16", ActiveSheet.Range("B65536").End(xlUp))
    SrchStr = "Data Base:"
    Do
        Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing
    
    
End Sub
Citação :
Se não for, posicionar na célula na linha naterior, na primeira coluna.
eu não entendi.
Att
Voltar ao Topo Ir em baixo
Ver perfil do usuário
pathfinder73



Mensagens : 30
Data de inscrição : 24/08/2012

MensagemAssunto: Macro para apagar linhas repetidas   Qui Dez 04, 2014 4:38 pm

Alexandre, fiz assim e funcionou... Aleluia! Tem como ficar mais enxuto o código:

....For i = Cells(Rows.Count, "A").End(xlUp).Row To 16 Step -1
........If Cells(i, 1).Value = "POSIÇÃO GERAL DO CLIENTE" Or Cells(i, 1).Value = "BB" Or Cells(i, 1).Value = "CP" Then
............Cells(i, 1).EntireRow.Delete
........Else
............If Cells(i, 2).Value = "Data Base:" Or Cells(i, 2).Value = "Banco:" Or Cells(i, 2).Value = "Limite Crédito:" Or Cells(i, 2).Value = "Tipo Cliente:" Or Cells(i, 2).Value = "Tipo de Garantia:" Or Cells(i, 2).Value = "Índice:" Or Cells(i, 2).Value = "Resumo de Bloqueio de Cobrança:" Then
................Cells(i, 2).EntireRow.Delete
............End If
........End If
....Next i


pathfinder73 escreveu:
Ops... digitei mesmo errado... é assim:

Idéia:
1. Localizar a última linha da planilha
2. Posicionar na célula na primeira coluna da última linha
3. Validar o texto da célula. Se for um determinado texto, apagar a linha. Se não for, validar a célula da coluna ao lado. Se for um determinado valor, apagar a linha.
4. Posicionar na célula da linha anterior, na primeira coluna.
4. Executar o loop até atingir a linha 16.

É possível de outra forma referenciar um Range usando o valor de uma variável? Pensei em criar uma string para referenciar o Range, mas como adicionar aspas no conteúdo da string?


alexandrevba escreveu:
Bom dia!!

Uma forma não atraente seria:
Código:
Sub AleVBA_951()
    Dim c As Range
    Dim SrchRng As Range
    Dim SrchStr As String
    
    
    Set SrchRng = ActiveSheet.Range("A16", ActiveSheet.Range("A65536").End(xlUp))
    SrchStr = "POSIÇÃO GERAL DO CLIENTE"
    Do
        Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing

     'Parte2
    Set SrchRng = ActiveSheet.Range("B16", ActiveSheet.Range("B65536").End(xlUp))
    SrchStr = "Data Base:"
    Do
        Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing
    
    
End Sub
Citação :
Se não for, posicionar na célula na linha naterior, na primeira coluna.
eu não entendi.
Att
Voltar ao Topo Ir em baixo
Ver perfil do usuário
alexandrevba



Mensagens : 1820
Data de inscrição : 13/07/2011
Localização : Serra - ES

MensagemAssunto: Re: Macro para apagar linhas repetidas   Qui Dez 04, 2014 9:33 pm

Boa tarde!!

Use um Array, para inserir quantos criterios desejar.
Código:
SubAleVBA_951V2()
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
   
    For Each cell In Range("A16:A2000")
        Select Case cell.Value
        Case "POSIÇÃO GERAL DO CLIENTE", "BB", "CP"
            cell.EntireRow.Delete
        End Select
    Next cell
   
    For Each cell In Range("B16:B2000")
        Select Case cell.Value
        Case "Data Base:", "Data Base:", "Banco:"
            cell.EntireRow.Delete
        End Select
    Next cell
   
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub

Att
Voltar ao Topo Ir em baixo
Ver perfil do usuário
pathfinder73



Mensagens : 30
Data de inscrição : 24/08/2012

MensagemAssunto: Macro   Sab Dez 06, 2014 2:09 pm

É isso mesmo. Matou a pau.

alexandrevba escreveu:
Boa tarde!!

Use um Array, para inserir quantos criterios desejar.
Código:
SubAleVBA_951V2()
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
    
    For Each cell In Range("A16:A2000")
        Select Case cell.Value
        Case "POSIÇÃO GERAL DO CLIENTE", "BB", "CP"
            cell.EntireRow.Delete
        End Select
    Next cell
    
    For Each cell In Range("B16:B2000")
        Select Case cell.Value
        Case "Data Base:", "Data Base:", "Banco:"
            cell.EntireRow.Delete
        End Select
    Next cell
    
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub

Att
Voltar ao Topo Ir em baixo
Ver perfil do usuário
alexandrevba



Mensagens : 1820
Data de inscrição : 13/07/2011
Localização : Serra - ES

MensagemAssunto: Re: Macro para apagar linhas repetidas   Dom Dez 07, 2014 4:18 am

Boa noite!!

Eu fico feliz em ajudar, obrigado pelo retorno!!

Att
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Conteúdo patrocinado




MensagemAssunto: Re: Macro para apagar linhas repetidas   Hoje à(s) 10:48 pm

Voltar ao Topo Ir em baixo
 
Macro para apagar linhas repetidas
Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo 
Página 1 de 1
 Tópicos similares
-
» Como valido cpf e cnpj em vba no access?
» Macro para exportar para o word
» [Resolvido] Erro em conversão de macro para código
» Macro para Excel armazenar dados no Access.
» Remover sub-fóruns para uma categoria sem apagar o seu conteúdo

Permissão deste fórum:Você não pode responder aos tópicos neste fórum
Fórum Excel Bácico, Avançado e Vba :: Avançado/VBA :: Excel Avançado/VBA-
Ir para: