Página 1 de 1

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

Enviado: 29 Set 2020 às 16:33
por betozo
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.

Imagem

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

Re: Macro e VBA que apague os registros mais antigos, se for

Enviado: 30 Set 2020 às 06:19
por AfonsoMira
Boas veja se é isto que deseja. :D

Ficheiro anexado.

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

Enviado: 30 Set 2020 às 07:59
por betozo
Foi por muito pouco kkkk, mas ainda quando executo a macro fica apenas 1 valor do mais recente, onde deveria estar 3 valores. Vou explicar por imagens.

O que está em vermelho é o que eu preciso que seja mantido na planilha:
Imagem
https://ibb.co/Qb8JyMr

Isto é o que está acontecendo com a execução da macro:
Imagem
https://ibb.co/XL4vgSL

Mas mesmo assim ficou muito bom, e esta questão de datas eu não estou conseguindo fazer :(

Re: Macro e VBA que apague os registros mais antigos, se for

Enviado: 30 Set 2020 às 08:28
por AfonsoMira
Assim está melhor? :D

Re: Macro e VBA que apague os registros mais antigos, se for

Enviado: 30 Set 2020 às 14:18
por babdallas
Fiz com matrizes, mas dá para fazer também com autofiltro, filtro avançado,. Dá tranquilamente para usar o PowerQuery também.
Código: Selecionar todos
Public Sub Teste()
    Dim vrtDados            As Variant
    Dim vrtFilt()           As Variant
    Dim datData             As Date
    Dim lngUltLin           As Long
    Dim lngCont             As Long
    Dim lngCol              As Long
    Dim lngDataMax          As Long
    Dim lngFilt             As Long
    
    With wshPLan
        lngUltLin = .Cells(.Rows.Count, 1).End(xlUp).Row
        
        vrtDados = .Range("A2:C" & lngUltLin).Value2
        
        datData = Application.WorksheetFunction.Max(.Range("A1:A" & lngUltLin))
        
        lngDataMax = Application.WorksheetFunction.CountIf(.Range("A1:C" & lngUltLin), _
                                                            datData)
                                                            
        ReDim vrtFilt(1 To lngDataMax, 1 To UBound(vrtDados, 2)) As Variant
        
        lngFilt = 0
        For lngCont = LBound(vrtDados, 1) To UBound(vrtDados, 1)
            If vrtDados(lngCont, 1) = datData Then
                lngFilt = lngFilt + 1
                For lngCol = 1 To UBound(vrtFilt, 2)
                    vrtFilt(lngFilt, lngCol) = vrtDados(lngCont, lngCol)
                Next lngCol
            End If
        Next
        
        .Range("A2:C" & lngUltLin).ClearContents
        
        .Range("A2:C" & lngFilt + 1).Value = vrtFilt
    End With
End Sub