Ir ao conteúdo

Outro Macro e VBA que apague os registros mais antigos, se forem o mesmo valor


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Fala galera, sou novo aqui e estou desesperado por uma ajuda.

Preciso que apague os registros mais antigos de uma lista de várias viagens, mantendo apenas o mais recente deles. O print abaixo deixa mais claro.

 

Screenshot_1.png.51e805693cca26a9bac03968bd4f3355.png

 

Neste caso eu precisaria que os do dia 21/09 e 23/09 fossem apagados, restando apenas os do dia 26/09. O problema é que tem repetições nas placas e que, se forem do mais recentes, precisam ser mantidas.

Ajudem um universitário desesperadoooo :(

Postado

@betozo Use a função max para identificar a maior data (assim como a maior a placa) e exclua os outros dados. Ou ordene os dados em ordem decrescente e deixe apenas o registro mais recente e exclua os outros.

  • Curtir 1
Postado

@Midori eu acabei fazendo um escopo aqui mas ainda não tive sucesso, minha macro exclui valores, mas não mantem as placas iguais com a mesma data, como mostra na imagem da pergunta. Também, não se resume a uma placa apenas, esta foi um exemplo, não me atentei em falar isto antes 😐

 

Sub removerAntigo()

Dim UltimaLinha As Long
UltimaLinha = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Dim i As Long
For i = 2 To UltimaLinha

If Cells(i, 1).Value = "" Then Exit Sub

If Cells(i, 3) = Cells(i + 1, 3) Then

    If Cells(i, 1) <= Cells(i + 1, 1) Then
    
    Rows(i).Delete
    If i = 2 Then i = 1
    
    End If

End If

Next i

End Sub

 

Resumindo: vou colar um relatório de determinado intervalo de datas (1 semana por exemplo) e quero me certificar de que não terei duplicidade no momento que eu usá-lo para analisar os dados. Sendo um relatório de transporte, em que posso ter mais de um conhecimento por placa (como é o caso do dia 26/09 na imagem), e diferentes placas no relatório, sempre mantendo os mais recentes.

Postado

@betozo Veja se desta forma resolve,

 

A macro vai deixar apenas os registros com a data mais recente, mantendo o maior Conhecimento mesmo se repetir.

 

Sub ExcluirPlacas()
    Dim Linha       As Long
    Dim MaiorConh   As Long
    Dim MaiorData   As Date
    
    Linha = 2
    MaiorData = WorksheetFunction.Max([A:A])
    MaiorConh = WorksheetFunction.MaxIfs([B:B], [A:A], MaiorData)
    
    While Cells(Linha, 1) <> ""
        If Not (Cells(Linha, 1) = MaiorData And _
            Cells(Linha, 2) = MaiorConh) Then
                Rows(Linha).Delete
        Else
            Linha = Linha + 1
        End If
    Wend
End Sub

 

  • Amei 1
Postado

@Midori infelizmente ainda não foi :( kkkkkk. To quase desistindo do projeto por causa desse vba.

 

vou postar um print de exatamente do que eu preciso, talvez fique mais claro. Este código está apagando se a placa ou conhecimento são diferentes também, que é algo que não pode ocorrer.

 

Esta seria a lista de registros que vou ter e que preciso da macro, meu banco de dados no caso:

3.png.6ef52ea51fe5bf47dda324fb982d5ac0.png

 

Este seria o problema, como pode notar eu tenho registros anteriores da mesma placa e preciso só dos mais recentes, como mostra abaixo:

4.png.4fc8275898b9596fe7a4b0b397c71f7f.png

 

Vou disponibilizar estes dados numa planilha online:

https://docs.google.com/spreadsheets/d/1iDzIuAtCraex7iEzWn8jzETJfzv4N9wdXxtNp4OBSJU/edit?usp=sharing

 

Postado

@betozo  Acho que não entendi.

 

Você tem que excluir os registros mais antigos independente da placa, não é isso? Com base nessa tabela apenas o registro de 27/09 vai ser mantido.

 

E mesmo se o critério for pela escolha da placa, supondo que seja a AYM.., apenas a data de 26/09 (Conh 25939) dessa placa seria mantido na planilha, não?

 

Postado

A placa depende sim. Vamos usar o exemplo da placa AYM, eu preciso que todos os registros do dia 26/09 (conh. 25935 até 25939) sejam mantidos e excluídos todos os do dia 21/09, que são os "antigos". Só que isso deve ser feito para cada placa, como pode ver pelo banco de dados que passei.

 

A necessidade desse VBA:

Para cada placa e conhecimento de frete (conh.) eu consigo lançar no Power BI e ter um mapa de cargas carregadas aqui onde trabalho, montando um dashboard que depois te mando um print se desejar :D

  • Solução
Postado

@betozo Assim deve resolver,

 

Sub ExcluirPlacas()
    Dim Linha       As Long
    Dim MaiorData   As Date
    
    Linha = 2
    
    While Cells(Linha, 1) <> ""
        MaiorData = WorksheetFunction.MaxIfs([A:A], [C:C], Cells(Linha, 3))
    
        If Cells(Linha, 1) <> MaiorData Then
            Rows(Linha).Delete
        Else
            Linha = Linha + 1
        End If
    Wend
End Sub

 

  • Obrigado 1
Postado

@Midori Obrigado pela paciência e por doar seu conhecimento, sem palavras! Ficou perfeito, funcionando do jeito que deveria ser.

 

Screenshot_5.png.b3e7fa6e4439cad853ca1cef765c4824.png

 

Seu trabalho me auxiliou nisto aqui. Que o universo te ilumine ♥

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!