Condividi:        

Excel - eliminare duplicati mantenendo data più recente

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Excel - eliminare duplicati mantenendo data più recente

Postdi bogumil » 13/08/12 13:55

Ciao,

ho a che fare con un file di più di 1000 righe. Come da titolo del topic,
mi servirebbe una macro per eliminare gli eventuali duplicati della colonna A utilizzando
il criterio della data più recente (colonna E). Lo scopo è quello di tenere traccia solo
dell'ultimo acquisto effettuato da ogni compratore

Per rendere l'idea il file è simile a questo:

(A)compratore * (B)acquisto * (C)quantità * (D)pagamento * (E)data acquisto*
pippo * mele * 5 * bancomat * 08/02/2012*
pluto * pere * 3 * contanti * 09/05/2012 *
pippo * fragole* 4 * contanti * 24/04/2012 *

Un grazie anticipato a chi, come me, non è in ferie, e avrà la pazienza di rispondermi ;)
bogumil
Utente Junior
 
Post: 10
Iscritto il: 29/06/12 18:59

Sponsor
 

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi wallace&gromit » 13/08/12 14:31

Ciao bogumil,
ho una soluzione, ma forse non è la migliore:
puoi creare una colonna d'appoggio F, dove in E2 inserisci questa formula matriciale (conferma con Ctrl + Maiusc + Enter) e copi verso il basso.
Codice: Seleziona tutto
=SE(E2=MAX(SE(A$2:A$1000=A2;E$2:E$1000));1;0)
poi con un filtro visualizzi solo i valori 1.
Quello che non è tanto bello è che il filtro non si aggiorna automaticamente.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi Flash30005 » 13/08/12 15:05

Leggi quanto scritto da Wallace&Gromit

e leggi la macro appena postata in questo topic

Devi solo adattarla alle tue esigenze
In quel caso, la macro, prende come riferimento la colonna C e confronta la colonna H (valore più piccolo)
Nel tuo devi controllare la colonna A e confrontare le celle in colonna E (data più grande)

Avrai un secondo foglio solo con le righe che ti interessano

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi bogumil » 13/08/12 18:05

Eccomi, grazie per le soluzioni!

Quella di Wallace&Gromit funziona senza problemi, purtroppo ha il "difetto" di non autoaggiornarsi

Dopo aver lanciato la macro, invece, come consigliato da Flash30005, mi è capitato questo:
sul secondo foglio nessun doppione, ma soltanto la riga con la data più recente, OK,
peccato che ho perso alcuni pezzi per strada (dovevo avere 222 righe, ne ho solo 127).

Sicuramente l'errore sta nell'adattamento della macro - non ho fatto altro che
modificare i riferimenti delle colonne, scrivendo così

Sub CompilaTabMin()
Set Ws1 = Worksheets("Generale")
Set Ws2 = Worksheets("TabellaMin")
UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
Ws2.Cells.Clear
Ws1.Rows("1:1").Copy Destination:=Ws2.Rows("1:1")
For RR1 = 2 To UR1 - 1
Descr1 = Ws1.Range("A" & RR1).Value
PU = Ws1.Range("E" & RR1).Value
RigaM = RR1
For RR1b = RR1 + 1 To UR1
If Descr1 = Ws1.Range("A" & RR1b).Value Then
If PU > Ws1.Range("E" & RR1b).Value Then
PU = Ws1.Range("E" & RR1b).Value
RigaM = RR1b
End If
Else
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
Ws1.Rows(RigaM & ":" & RigaM).Copy Destination:=Ws2.Rows(UR2 & ":" & UR2)
RR1 = RR1b
GoTo saltaRR1
End If
Next RR1b
saltaRR1:
Next RR1

End Sub


Cosa ho sbagliato?

Eventualmente poi, volendo impegnarcisi, la macro potrebbe anche operare le modifiche sullo stesso foglio,
senza doverne aggiungere per forza un altro?
bogumil
Utente Junior
 
Post: 10
Iscritto il: 29/06/12 18:59

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi Flash30005 » 14/08/12 02:11

Dovresti modificare questa riga da così
Codice: Seleziona tutto
If PU > Ws1.Range("E" & RR1b).Value Then

a così
Codice: Seleziona tutto
If PU < Ws1.Range("E" & RR1b).Value Then

Perché, nel tuo caso il valore deve essere massimo e non minimo a parità di compratore (colonna "A")

Se ottieni una sola riga dipende dal fatto che la colonna A non è in ordine alfabetico
ovvero i nomi si intercalano (mettendoli in ordine li avrai raggruppati).
prova ad ordinarli e avvia la macro modificata

fai sapere

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi wallace&gromit » 14/08/12 07:24

oppure, portando avanti il mio discorso, inserisci questa macro nel modulo del foglio di lavoro:
Codice: Seleziona tutto
Sub Worksheet_SelectionChange(ByVal Target As Range)
CheckArea = "F:F"
If Not Application.Intersect(Target, Range(CheckArea)) Is Nothing Then
    Selection.AutoFilter
    Selection.AutoFilter Field:=6, Criteria1:="1"
End If
End Sub
così ogni volta che selezioni una qualsiasi cella della colonna F il filtro si aggiorna automaticamente.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi bogumil » 14/08/12 18:49

Flash30005 ha scritto:Dovresti modificare questa riga da così
Codice: Seleziona tutto
If PU > Ws1.Range("E" & RR1b).Value Then

a così
Codice: Seleziona tutto
If PU < Ws1.Range("E" & RR1b).Value Then

Perché, nel tuo caso il valore deve essere massimo e non minimo a parità di compratore (colonna "A")

Se ottieni una sola riga dipende dal fatto che la colonna A non è in ordine alfabetico
ovvero i nomi si intercalano (mettendoli in ordine li avrai raggruppati).
prova ad ordinarli e avvia la macro modificata

fai sapere

ciao


Ho modificato la macro, ma sembra che non sia cambiato nulla: ancora e soltanto 127 righe...
Altra stranezza: che scriva If PU < Ws1.Range("E" & RR1b).Value Then
oppure If PU > Ws1.Range("E" & RR1b).Value Then
mi ricava sempre la riga con la data più recente :eeh:
Nella colonna A per semplificare avevo scritto dei nomi, ma si tratta in verità di numeri (codici clienti), ed erano
già riordinati in modo ascendente.
Tramite vlookup ho ricavato le righe che si sono perse, ma mi sfugge che cosa le accomuni e secondo quale criterio siano state escluse

wallace&gromit ha scritto:oppure, portando avanti il mio discorso, inserisci questa macro nel modulo del foglio di lavoro:
Codice: Seleziona tutto
Sub Worksheet_SelectionChange(ByVal Target As Range)
CheckArea = "F:F"
If Not Application.Intersect(Target, Range(CheckArea)) Is Nothing Then
    Selection.AutoFilter
    Selection.AutoFilter Field:=6, Criteria1:="1"
End If
End Sub
così ogni volta che selezioni una qualsiasi cella della colonna F il filtro si aggiorna automaticamente.


run time error 424: Object required :undecided:
Mi spieghi meglio a cosa serve questa macro?
bogumil
Utente Junior
 
Post: 10
Iscritto il: 29/06/12 18:59

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi Flash30005 » 14/08/12 19:04

Potresti inviare uno stralcio del file?
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi bogumil » 14/08/12 19:12

OK. Come lo allego qui?
bogumil
Utente Junior
 
Post: 10
Iscritto il: 29/06/12 18:59

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi Flash30005 » 14/08/12 19:20

Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Re: Excel - eliminare duplicati mantenendo data più recente

Postdi Flash30005 » 14/08/12 20:48

Ho adattato la macro
in effetti eliminava alcune righe
invece, per quanto riguarda la data prende quella più recente (quello da te richiesto)
Codice: Seleziona tutto
Sub CompilaTabMin()
Set Ws1 = Worksheets("Esempio")
Set Ws2 = Worksheets("Foglio1")
UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
Ws2.Cells.Clear
Ws1.Rows("1:1").Copy Destination:=Ws2.Rows("1:1")
For RR1 = 2 To UR1 - 1
Descr1 = Ws1.Range("A" & RR1).Value
PU = Ws1.Range("E" & RR1).Value
RigaM = RR1
If RR1 = UR1 Then Agg = 0
For RR1b = RR1 + 1 To UR1
If Descr1 = Ws1.Range("A" & RR1b).Value Then
    If PU <= Ws1.Range("E" & RR1b).Value Then
        PU = Ws1.Range("E" & RR1b).Value
        RigaM = RR1b
    End If
Else
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
Ws1.Rows(RigaM & ":" & RigaM).Copy Destination:=Ws2.Rows(UR2 & ":" & UR2)
RR1 = RR1b - 1
GoTo saltaRR1
End If
Next RR1b
    If RR1 = UR1 - 1 And RR1b = UR1 + 1 Then
        UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
        Ws1.Rows(RigaM & ":" & RigaM).Copy Destination:=Ws2.Rows(UR2 & ":" & UR2)
    End If
saltaRR1:
Next RR1
If Ws1.Range("A" & UR1).Value <> Ws1.Range("A" & UR1 - 1).Value Then
    UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
    Ws1.Rows(UR1 & ":" & UR1).Copy Destination:=Ws2.Rows(UR2 & ":" & UR2)
End If
End Sub


Ciao

EDIT ore 22:30 - corretta macro per un bug sull'ultima riga
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi bogumil » 14/08/12 21:39

Ottimo, è perfetta. Grazie ancora!

Se volessi imparare VB partendo da 0, che letture mi consiglieresti?
bogumil
Utente Junior
 
Post: 10
Iscritto il: 29/06/12 18:59

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi Flash30005 » 15/08/12 00:56

Ci sono diversi manuali acquistabili anche in rete e studiare non fa mai male, il rischio è che la teoria senza la pratica ti "allontani" dal programmare soprattutto perché tante nozioni senza applicazione diventano "noiose" in quanto non vedi praticamente il risultato.
Poi, dipende dalla tua esigenza il voler addentrarti in questo "mondo".
Nella realtà quotidiana i problemi sono spesso diversi e saltuari è più pratico e opportuno, quindi, cercare la soluzione di volta in volta, per questo ti consiglio di inizare a familiarizzare con il vba provando a registrare una macro mentre effettui delle azioni/operazioni nel/nei fogli e dopo aver fermato la macro leggere il codice generato (magari in debug passo-passo), inoltre puoi usufruire dell'ottimo Help in linea che ti potrebbe aiutare a capire alcune funzioni e/o codici.

In questo Forum, comunque, potrai sempre trovare amici disposti ad aiutarti e a darti spiegazioni in caso di dubbi.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi bogumil » 15/08/12 18:31

Flash30005 ha scritto:
In questo Forum, comunque, potrai sempre trovare amici disposti ad aiutarti e a darti spiegazioni in caso di dubbi.

ciao


Confermo, ottimo forum e grande disponibilità. Grazie per aiuto e consigli


Ciao e alla prossima
bogumil
Utente Junior
 
Post: 10
Iscritto il: 29/06/12 18:59

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi wallace&gromit » 16/08/12 08:03

bogumil ha scritto:run time error 424: Object required :undecided:
Mi spieghi meglio a cosa serve questa macro?

forse hai risolto in maniera più completa con flash, comunque rispondo alla domanda:
la mia macro inserisce semplicemente un filtro automatico, assumendo che nella colonna F ci sia una serie di 1 e 0 in funzione della data più recente (utilizzando la formula che avevo postato).
Nel mio file di prova funziona egregiamente, da te forse non trova dati in colonna F?.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi baraldo » 26/06/14 22:05

Ciao!macro perfetta con file fino a 10.000 righe. Io ho file con oltre 400.000 record e si impalla. Alternative oltre ad aggiungere RAM? Grazie e complimenti
baraldo
Newbie
 
Post: 1
Iscritto il: 26/06/14 22:02

Re: Excel - eliminare duplicati mantenendo data più recente

Postdi Anthony47 » 27/06/14 01:50

Se spieghi quale e' il tuo layout di dati e cosa vuoi fare certamente facciamo prima; se vuoi allegare un file di esempio (meglio se con almeno 50mila righe) guarda qui: viewtopic.php?f=26&t=80395
Come server suggerisco di usare filedropper.com oppure dropbox.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Excel - eliminare duplicati mantenendo data più recente":


Chi c’è in linea

Visitano il forum: Nessuno e 43 ospiti

cron