Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Excluir linha de acordo com mais de um criterio

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
filipe_oliv95
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Sex Nov 27, 2015 9:04 am

Excluir linha de acordo com mais de um criterio

Mensagem por filipe_oliv95 »

Bom dia!

Eu tenho uma planilha, no qual precisava de uma macro para apagar linhas que tivessem as 3 primeiras colunas idênticas. Por exemplo, se a linha 1 tiver as 3 primeiras colunas iguais a da linha 27, a linha 1 INTEIRA fosse apagada (tem que ser de cima baixo!!). Eu li um post seu parecido com a minha dúvida (http://www.tomasvasquez.com.br/blog/mic ... m-criterio), mas precisava de uma adaptação pra minha planilha, e sou novato em linguagem VBA!

Agradeço desde ja!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
netocasaroli
Consultor
Consultor
Mensagens: 219
Registrado em: Seg Mai 11, 2015 5:24 pm
Localização: Londrina-PR

Re: Excluir linha de acordo com mais de um criterio

Mensagem por netocasaroli »

Bom dia Filipe,

Primeiramente, bem-vindo ao fórum. Compacte seu arquivo e poste para podermos ajudá-lo.


filipe_oliv95
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Sex Nov 27, 2015 9:04 am

Re: Excluir linha de acordo com mais de um criterio

Mensagem por filipe_oliv95 »

Bom dia Neto!

Segue em anexo a planilha.
OBS: como a planilha contem itens de trabalho (confidenciais), eu os substitui por um x.

Fico no aguardo, abraço!
Anexos
Exemplo.rar
(529.78 KiB) Baixado 166 vezes


Avatar do usuário
netocasaroli
Consultor
Consultor
Mensagens: 219
Registrado em: Seg Mai 11, 2015 5:24 pm
Localização: Londrina-PR

Re: Excluir linha de acordo com mais de um criterio

Mensagem por netocasaroli »

Filipe,

Insira um novo módulo e utilize o código abaixo:

Código: Selecionar todos

Option Explicit

Sub ExcluiDuplicatas()
'-------------------------------------------------------------------------------------------------------'
' Autor:        Neto Casaroli                                                                           '
' Criação:      30/11/2015                                                                              '
' Comentário:   Exclui linhas em duplicidade, conforme valores da coluna C                              '
'-------------------------------------------------------------------------------------------------------'

    'Declaração das Variáveis
    Dim Intervalo   As Range
    Dim Celula      As Range
    Dim Contagem    As Long 'Variável que identificará a duplicidade
    
    'Define o intervalo para análise do dados
    Set Intervalo = Sheet1.Range("C2:C" & Sheet1.Cells(Rows.Count, 3).End(xlUp).Row)
    
    'Verifica dados em duplicidade no intervalo de dados e exclui as linhas tais dados
InicioLoop:
    For Each Celula In Intervalo
        Contagem = Application.WorksheetFunction.CountIf(Intervalo, Celula.Value)
        If Contagem > 1 And Celula.Value <> 0 Then
            Celula.EntireRow.Delete 'Exclui toda a linha
            Exit For 'Sai do loop
            GoTo InicioLoop 'Inicia o loop desde o começo
        End If
    Next Celula
    
End Sub
Não esqueça de salvar a planilha habilitada para macros (.xlsm).

Qualquer dúvida ou problema, poste aí...


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


filipe_oliv95
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Sex Nov 27, 2015 9:04 am

Re: Excluir linha de acordo com mais de um criterio

Mensagem por filipe_oliv95 »

Quase perfeito Neto! Só tem uma questão: pode ocorrer da coluna B ter itens duplicados, e na coluna C ambos serem 0. Ou até a coluna A ter itens duplicados, e as colunas B e C serem 0. Nesses dois casos, a macro não pegaria! Teria como fazer um ajuste para incluir esses dois casos particulares?

Um abraço.


Avatar do usuário
netocasaroli
Consultor
Consultor
Mensagens: 219
Registrado em: Seg Mai 11, 2015 5:24 pm
Localização: Londrina-PR

Re: Excluir linha de acordo com mais de um criterio

Mensagem por netocasaroli »

Deixa só eu entender uma coisa: a verificação de duplicidade deve ser feita, então, em cada coluna (A, B e C) quando as demais forem 0? Por exemplo: no modelo enviado, as linhas 2, 3 e 4 possuem os mesmos valores para a coluna A, mas valores diferentes para as colunas B e C. As linhas 2 e 3 devem ser excluídas?


filipe_oliv95
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Sex Nov 27, 2015 9:04 am

Re: Excluir linha de acordo com mais de um criterio

Mensagem por filipe_oliv95 »

Bom dia Neto!
Não, somente se tiverem linhas com as 3 primeiras colunas iguais.
Por exemplo :
136006 1492030 136011
136006 1492030 136011

ou

136069 1492291 0
136069 1492291 0

Caso tenha qualquer um dos valores diferentes, a macro pularia e nao apagaria a linha
por exemplo:

132337 1474957 132338
132337 1474957 132339

ou

136069 1492288 0
136069 1492289 0

Nesses dois casos, não deve ser apagado!!

Um abraço.


filipe_oliv95
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Sex Nov 27, 2015 9:04 am

Re: Excluir linha de acordo com mais de um criterio

Mensagem por filipe_oliv95 »

PS: Talvez esse fluxograma ajude a entender o que eu quero!

Muito obrigado pela atenção!
Anexos
FLUXO.png
FLUXO.png (26.19 KiB) Exibido 5558 vezes


Avatar do usuário
netocasaroli
Consultor
Consultor
Mensagens: 219
Registrado em: Seg Mai 11, 2015 5:24 pm
Localização: Londrina-PR

Re: Excluir linha de acordo com mais de um criterio

Mensagem por netocasaroli »

Filipe,

Tente agora:

Código: Selecionar todos

Option Explicit

Sub ExcluiDuplicatas()
'-------------------------------------------------------------------------------------------------------'
' Autor:        Neto Casaroli                                                                           '
' Criação:      03/12/2015                                                                              '
' Comentário:   Exclui linhas em duplicidade                                                            '
'-------------------------------------------------------------------------------------------------------'

    'Declaração das Variáveis
    Dim Intervalo1  As Range
    Dim Intervalo2  As Range
    Dim Intervalo3  As Range
    Dim Celula      As Range
    Dim Contagem1   As Long 'Variável que identificará a duplicidade na coluna A
    Dim Contagem2   As Long 'Variável que identificará a duplicidade na coluna B
    Dim Contagem3   As Long 'Variável que identificará a duplicidade na coluna C
    
    'Define o intervalo para análise do dados
    Set Intervalo1 = Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, 1).End(xlUp).Row)
    Set Intervalo2 = Sheet1.Range("B2:B" & Sheet1.Cells(Rows.Count, 2).End(xlUp).Row)
    Set Intervalo3 = Sheet1.Range("C2:C" & Sheet1.Cells(Rows.Count, 3).End(xlUp).Row)
    
    'Verifica dados em duplicidade no intervalo de dados e exclui as linhas tais dados
InicioLoop:
    For Each Celula In Intervalo1
        Contagem1 = Application.WorksheetFunction.CountIf(Intervalo1, Celula.Value)
        Contagem2 = Application.WorksheetFunction.CountIf(Intervalo2, Celula.Offset(0, 1).Value)
        Contagem3 = Application.WorksheetFunction.CountIf(Intervalo3, Celula.Offset(0, 2).Value)
        
        If Contagem1 > 1 And Contagem2 > 1 And Contagem3 > 1 And Celula.Value <> 0 Then
            Celula.EntireRow.Delete 'Exclui toda a linha
            GoTo InicioLoop 'Inicia o loop desde o começo
        End If
    Next Celula
    
End Sub


filipe_oliv95
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Sex Nov 27, 2015 9:04 am

Re: Excluir linha de acordo com mais de um criterio

Mensagem por filipe_oliv95 »

Neto, desculpe te incomodar, mas nada aconteceu! Você chegou a testar na planilha? eu troquei o nome da aba pra "Sheet1", mesmo assim nada acontece!

Um abraço!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder