Il problema dei 3 corpi: Attraverso continenti e decadi, cinque amici geniali fanno scoperte sconvolgenti mentre le leggi della scienza si sgretolano ed emerge una minaccia esistenziale. Vieni a parlarne su TopManga.
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

VBA trova duplicati con data uguale

Ultimo Aggiornamento: 16/05/2018 23:28
Post: 1
Registrato il: 17/04/2018
Età: 32
Utente Junior
2016
OFFLINE
16/05/2018 11:30

Ciao a tutti,
ringrazio fin da subito per il vostro supporto.
Premettendo che non sono un grande espero di VBA (però mi sto documentando), ho creato un codice che mi permette di trovare delle righe duplicate facendo il check su due valori e tenere tra tutte quella con data più recente (mentre nelle altre scrive nella colonna 31 VALORE DUPLICATO).
La mia difficoltà è la seguente: a volte ho delle righe duplicate, con la stessa data, ma con il codice che ho scritto riesco ad individuare i duplicati e tenere solo quelli con data più recente.
Quindi riassumendo, vorrei scrivere (o modificare il codice che trovate di seguito), in modo tale che mi permetta di individuare se sono presenti delle righe duplicate che hanno la stessa data (sempre facendo il check su due variabili) ed in caso di riscontro positivo scivere per un solo duplicato nella colonna numero 31 la dicitura "DUPLICATO CON UGUALE DATA", in modo che qualora supponendo che le righe duplicate fossero due, in una non voglio scritto nulla nella colonna 31 mentre nella seconda riga duplicata la dicituta "DUPLICATO CON UGUALE DATA".
Spero di essere stato chiaro.
Grazie mille

il codice è il seguente:

Sub DOPPIONI()


xRiga = Cells(Rows.Count, 1).End(xlUp).Row 'Conto le righe occupate alla colonna A perche ho sicuramente un valore

For i = 2 To xRiga
For x = 2 To xRiga
Data = Cells(i, 2) 'determino la colonna data (B)
CODICE1 = Cells(i, 10) 'determino la colonna CODICE1 (F)
If CODICE1 = Cells(x, 10) And Data > Cells(x, 2) Then 'controllo se il CODICE1 (colona J) si ripete e la data/ora della cella colonna B è più recente'
Cells(x, 31) = "" 'Se quanto riga sopra si verifica allora aggiungo dicitura NIENTE nella colonna 31
End If
Next x
Next i

xRiga = Cells(Rows.Count, 1).End(xlUp).Row 'Conto le righe occupate alla colonna A
For i = 2 To xRiga
For x = 2 To xRiga
Data = Cells(i, 2) 'determino la colonna data (B)
CODICE2 = Cells(i, 3) 'determino la colonna CODICE2 (C)
If CODICE2 = Cells(x, 3) And Data > Cells(x, 2) Then 'controllo se IL CODICE2 (colona C) si ripete e la data/ora della cella colonna B è più recente'
Cells(x, 31) = "DUPLICATO DA ELIMINARE" 'Se quanto riga sopra si verifica allora aggiungo dicitura DUPLICATO DA ELIMINARE nella colonna 31
End If
Next x
Next i

'FINE LOOP
MsgBox "Completed"
Post: 4.095
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
16/05/2018 11:36

allega un file di esempio da testare

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 1.855
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
16/05/2018 12:00

Si, anche perchè ci sono delle incongruenze in quello che scrivi nel codice, es:

CODICE1 = Cells(i, 10) 'determino la colonna CODICE1 (F)

10 non è la col. F ma col. J

etc etc

saluti



Domenico
Win 10 - Excel 2016
Post: 1
Registrato il: 17/04/2018
Età: 32
Utente Junior
2016
OFFLINE
16/05/2018 12:04

Ciao,
ecco il file in allegato.
ho evidenziato in verde le righe per le quali il codice attuali funziona, invece in giallo le righe che sono duplicate con la stessa data e vorrei creare il codice che mi permetta di identificarle.
Grazie mille
Post: 3.464
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
16/05/2018 13:23

Ciao a tutti
Allora se esistono doppioni scriviamo in AE. Però dici anche Di tenere la riga con la data più recente.
Tu hai fatto due cicli For con due ricerche diverse (solo la seconda parte funziona)
Credo che Tu desideri fare un controllo sulle colonne C e J Se i CODICI sono uguali controllare la DATA (casomai tenere quella recente)
Giusto così o sbaglio ...., il nome in colonna D non c'entra nulla?
Excel 2013
Post: 2
Registrato il: 17/04/2018
Età: 32
Utente Junior
2016
OFFLINE
16/05/2018 13:44

Ciao Raffaele i due cicli for che ho scritto funzionano e li vorrei tenere.. vorrei aggiungere una parte aggiuntiva a questo codice in modo da tenere un solo duplicato con data più recente (quello che gia fanno i due cicli for), ed inoltre legare un controllo duplicati anche con la stessa data.. perche non riesco ad individuarli.. Quindi se ho due righe duplicate (Con stesso CODICE1 E CODICE2) MA con la stessa data, vorrei tenere soltanto una riga mentre nell' altra scrivere in colonna AE "duplicato con data uguale" .. spero di essermi spiegato bene grazie mille
Post: 3.465
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
16/05/2018 14:16

>>>i due cicli for che ho scritto funzionano
Si, solo con determinate condizioni
Ti allego un files, dove ho messo in colonna AG una formula (trascinala fino desideri ex riga 100.000)
Il VBA prima riordina la tabella con le date in ordine, poi esegue un solo ciclo for
Excel 2013
Post: 3
Registrato il: 17/04/2018
Età: 32
Utente Junior
2016
OFFLINE
16/05/2018 15:51

Ciao,
Forse non sono riuscito a spiegarmi bene e chiedo scusa se non utilizzo termini tecnici.
La mia necessità è trovare un codice per controllare se ci sono righe doppioni (facendo check su CODICE1 e CODICE2) a prescindere la data..
Quindi se CODICE1 e CODICE2 SONO uguali, vorrei che nella colonna AE venisse scritto "DUPLICATO CON STESSA DATA"..
Potresti aiutarmi?
Post: 4
Registrato il: 17/04/2018
Età: 32
Utente Junior
2016
OFFLINE
16/05/2018 16:24

E in caso di due righe duplicate me ne dovrebbe segnare soltanto una, così una riga resta nel file principale invece la seconda poi la sposto in un altro file
Post: 3.467
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
16/05/2018 18:11

Prova in questo modo, comunque il mio era più veloce in caso di 100.000 righe
vb
'Option Explicit ' solo se dichiari le variabili
Sub DOPPIONI2()
'Dim dichiarare le variabili...
xRiga = Cells(Rows.Count, 1).End(xlUp).Row 'Conto le righe occupate alla colonna A
Range("AE1:AE" & xRiga).ClearContents
For i = 2 To xRiga
    Data = Cells(i, 2) 'determino la colonna Data (B)
    CODICE1 = Cells(i, 3) 'determino la colonna CODICE1 (C)
    CODICE2 = Cells(i, 10) 'determino la colonna CODICE2 (F)
    For x = i + 1 To xRiga
        If CODICE1 = Cells(x, 3) And CODICE2 = Cells(x, 10) Then
            If Cells(x, 2) < Data Then Cells(i, 31) = "Oltre"
            If Cells(x, 2) = Data Then Cells(i, 31) = "Pari"
            If Cells(x, 2) > Data Then Cells(i, 31) = "Minore"
        End If
    Next x
Next i
For i = 2 To xRiga
For x = i To xRiga
If Cells(x, 31) = "Oltre" Then Cells(x, 31) = ""
If Cells(x, 31) = "Pari" Then Cells(x, 31) = "DUPLICATO CON STESSA DATA"
If Cells(x, 31) = "Minore" Then Cells(x, 31) = "DUPLICATO DA ELIMINARE"
Next x
Next i
MsgBox "Completed"
End Sub
Excel 2013
Post: 5
Registrato il: 17/04/2018
Età: 32
Utente Junior
2016
OFFLINE
16/05/2018 18:54

Ciao Raffaele,
Ho provato la macro ma non funziona del tutto.. non riesce ad identificarmi ancora una quindicina di righe che sono duplicate con la stessa data (stesso CODICE1 e CODICE2).. ma non riesco a capire il perche ;(.. mi potresti dare una mano? c'è qualcosa che non va?
Forse perchè non arriva fino in fondo? ci sono più di 5000 righe.. scusa se non sono ferrato in materia e faccio domande stupide ma è la prima volta che mi approccio ad una macro
[Modificato da mariobonardi 16/05/2018 19:00]
Post: 3.470
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
16/05/2018 19:07

Secondo me hai allegato un files del cavolo, oppure dopo CODICE1 ed CODICE2 ci sono dei spazi
Sul Tuo esempio il VBA funziona, oppure "forse" non ho capito nulla.
Excel 2013
Post: 6
Registrato il: 17/04/2018
Età: 32
Utente Junior
2016
OFFLINE
16/05/2018 19:21

Ciao,
Ho allegato il file con lo stesso format di quello originale, ho controllato e non ci sono spazi vuoti nel CODICE1 e CODICE2, ho anche ordinato in modo da lasciare eventuali spazi vuoti alla fine..
Il codice funziona e i duplicati che trova sono giusti.. ma è come se non li riuscisse a trovare tutti.. infatti ne trova soltanto 18 quando in realta dovrebbero essere 25.
Io ho copiato il codice cosi come lo hai scritto, dovevo apportare qualche modifica magari?
Post: 3.471
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
16/05/2018 19:36

>>>Ho allegato il file con lo stesso format di quello originale
Forse il "format" di sicuro non le righe???
Originale = 5000 righe il Tuo solo 10 righe

Per me il VBA funziona sul Tuo allegato.
Non conosco le Tue problematiche dell'originale, sul codice non devi far nulla (spero solo di non sbagliare)
[Modificato da raffaele1953 16/05/2018 19:42]
Excel 2013
Post: 7
Registrato il: 17/04/2018
Età: 32
Utente Junior
2016
OFFLINE
16/05/2018 21:19

Mi sapresti dire quali potrebbero essere le problematiche secondo te cosi magari tento di risolverle?
Perche nel mio file usando i due cicli For mi trova 172 DULICATI DA ELIMINARE invece usando il codice nuovo me ne trova soltanto 135.
Non ho potuto fare il paragona con DUPLICATO CON STESSA DATA perchè non presente nel mio vecchio codice.
è strano il fatto e mi dispiace non poter risolverlo perche hai scritto un codice davvero bello ed utilissimo, e ti ringrazio per questo
Post: 3.473
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
16/05/2018 23:28

Scusa, perchè TU non prendi una copia del TUO foglio dati.
Cancelli tutto, tranne colonna B+C+J ed alleghi. Solo per verificare (casomai se noti un'errore gli metti un colore???)...

EDIT pure colonna A
[Modificato da raffaele1953 17/05/2018 01:36]
Excel 2013
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 07:38. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com