Ir ao conteúdo
  • Cadastre-se

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


Ir à solução Resolvido por Midori,

Posts recomendados

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 :(

Link para o comentário
Compartilhar em outros sites

@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.

Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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

 

Link para o comentário
Compartilhar em outros sites

@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?

 

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Solução

@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
Link para o comentário
Compartilhar em outros sites

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...