Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

confronta righe ed elimina righe uguali

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

confronta righe ed elimina righe uguali

Postdi miko » 13/05/10 18:58

ciao,
sto cercando di realizzare una macro che, come da titolo, confronta ogni riga nel range B3-K, con le righe successive e se trova righe uguali le elimina lasciando una sola di queste righe uguali.
quindi parte dalla prima riga B3-K3 e confronta con le successive;
se nel range B-K trova una riga uguale alla B3-K3, la elimina e lascia solo la riga B3-K3;
poi considera la riga B4-K4, la confronta con le successive ed elimina le successive righe uguali, e così fino alla fine del range B-K che ha un numero di righe variabile.
credo di aver letto nel forum qualche topic simile, ma non riesco più a trovare questi argomenti.
in rete ho trovato solo il confronto tra colonne e limitatamente ad una singola cella.
ma come si procede con più valori?
ciao grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: confronta righe ed elimina righe uguali

Postdi Anthony47 » 13/05/10 22:47

Senza macro:
-fai in modo che in riga 1 ci sia una intestazione
-seleziona le intere colonne B:K
-Menu /Dati /Filtro /Filtro avanzato; spunta "copia univoca dei record" e lascia "filtra l' elenco sul posto"; Ok.
Ti visualizzera' solo le righe uniche; copia tutta l' area B:K e incollala su un nuovo foglio.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: confronta righe ed elimina righe uguali

Postdi miko » 14/05/10 10:48

salve,
grazie per le tue indicazioni, ma preferivo una macro poichè devo ripetere la stessa operazione più volte e credo che con la macro si può rendere più spedita l'elaborazione.
ho realizzato questa macro, nella quale, dovendo verificare la sua validità, per evitare di dover inserire i dati ogni volta che elimina una riga, ho inserito la colorazione delle righe uguali;
non riuscendo, inoltre, a far lavorare la macro quando tutti i dati sono contenuti nelle stesse colonne B-K ho dovuto considerare due range distinti B-K ed M-V.
Codice: Seleziona tutto
Sub confronta()
URB = Sheets("Foglio1").Range("B" & Rows.Count).End(xlUp).Row
URM = Sheets("Foglio1").Range("M" & Rows.Count).End(xlUp).Row
  For rb = 3 To URB
     For rm = 3 To URM
        For COLB = 2 To 11
If Cells(rb, COLB).Value = Cells(rm, COLB + 11).Value Then '<<<<<<<<<
     Range("M" & rm & ":V" & rm).Interior.ColorIndex = 3
  'Range("M" & rm & ":V" & rm).ClearContents
 End If
Next COLB
Next rm
Next rb
Range("A3").Select
End Sub

la macro tuttavia non esegue il calcolo che vorrei in quanto la linea evidenziata, confronta tutti i valori di una riga con le altre e se trova anche un solo valore uguale, colora-elimina la riga, invece deve eliminare la riga quando tutti i valori sono uguali.
come modifico la macro?
ciao grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: confronta righe ed elimina righe uguali

Postdi Flash30005 » 14/05/10 12:20

Ciao Miko

Una macro utilizzata tempo fa in un programmino è questa
Codice: Seleziona tutto
Sub DelDoppi()
Worksheets("Foglio1").Select
Righe = Worksheets("Foglio1").Cells(Rows.Count, 3).End(xlUp).Row
For I1 = 2 To Righe - 1
    ValRiga = Cells(I1, 3).Value
    If ValRiga = "" Then GoTo esci
    Righe2 = Worksheets("Foglio1").Cells(Rows.Count, 3).End(xlUp).Row
    For I = Righe2 To I1 + 1 Step -1
        If Cells(I, 3).Value = 0 Or Cells(I, 3).Value = ValRiga Then
            Range("C" & I & ":L" & I).Select
            Selection.Delete Shift:=xlUp
        End If
    Next I
Next I1
esci:
Range("B1").Select
End Sub


Devi solo adattarla alle tue esigenze,
non ho capito se vuoi eliminare l'intera riga o solo alcune celle.

Per verificare come funziona dovrai solo mettere dei numeri ripetuti nella colonna C e andare in debug con il funzionamento passo passo

Se incontri difficoltà fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: confronta righe ed elimina righe uguali

Postdi miko » 23/05/10 10:29

ciao, grazie per la macro;
non soddisfa tuttavia, le mie esigenze poichè l'eliminazione dipende dal valore nella cella in colonna c.
ma prendendo spunto dalla tua macro ho realizzato questo codice
Codice: Seleziona tutto
Sub CANCELLA_RIGHE_UGUALI()
Worksheets("Foglio1").Select
URB = Worksheets("Foglio1").Range("B" & Rows.Count).End(xlUp).Row
c = 2
For R = 3 To URB
Val2 = Cells(R, c).Value
Val3 = Cells(R, c + 1).Value
Val4 = Cells(R, c + 2).Value
Val5 = Cells(R, c + 3).Value
Val6 = Cells(R, c + 4).Value
Val7 = Cells(R, c + 5).Value
Val8 = Cells(R, c + 6).Value
Val9 = Cells(R, c + 7).Value
Val10 = Cells(R, c + 8).Value
Val11 = Cells(R, c + 9).Value
For R2 = R + 1 To URB
If Cells(R2, c).Value = Val2 And Cells(R2, c + 1).Value = Val3 And _
   Cells(R2, c + 2).Value = Val4 And Cells(R2, c + 3).Value = Val5 And _
   Cells(R2, c + 4).Value = Val6 And Cells(R2, c + 5).Value = Val7 And _
   Cells(R2, c + 6).Value = Val8 And Cells(R2, c + 7).Value = Val9 And _
   Cells(R2, c + 8).Value = Val10 And Cells(R2, c + 9).Value = Val11 Then _
     Range("B" & R2 & ":K" & R2).ClearContents
       Next R2
  Call ELIMINA_RIGHE_VUOTE
  URB = Worksheets("Foglio1").Range("B" & Rows.Count).End(xlUp).Row
Next R
End Sub

non credo che sia il massimo in qualità, ma svolge il lavoro richiesto.
forse si può migliorare il codice evitando tanti AND?
grazie
ciao buona domenica
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: confronta righe ed elimina righe uguali

Postdi Flash30005 » 23/05/10 10:58

Se funziona e ti soddisfa lascia tutto così come l'hai realizzata
se vuoi ottimizzare la macro dovresti inviare il foglio

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: confronta righe ed elimina righe uguali

Postdi miko » 23/05/10 11:53

ciao,
la macro è soddisfacente, ma come hai intuito volevo ottimizzare il codice;
invio il file:
http://rapidshare.com/files/390650564/elimina_righe_uguali.xls.html
ciao grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: confronta righe ed elimina righe uguali

Postdi Flash30005 » 23/05/10 12:16

Prova questa macro
Codice: Seleziona tutto
Sub EliminaDoppioni()
Worksheets("Foglio1").Select
UR = Worksheets("Foglio1").Range("B" & Rows.Count).End(xlUp).Row
For RR1 = 3 To UR
Riga1 = ""
For CC1 = 2 To 11
Riga1 = Riga1 & Cells(RR1, CC1).Text
Next CC1
For RR2 = UR To RR1 + 1 Step -1
Riga2 = ""
For CC2 = 2 To 11
Riga2 = Riga2 & Cells(RR2, CC2).Text
Next CC2
If Riga2 = Riga1 Then Rows(RR2 & ":" & RR2).Delete
Next RR2
Next RR1
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: confronta righe ed elimina righe uguali

Postdi Anthony47 » 23/05/10 17:17

Oppure ad esempio questa, che sfrutta il Filtro Avanzato:
Codice: Seleziona tutto
Option Base 1   '!!! QUESTA VA sulla Prima Riga del Modulo
Sub UniRec()
On Error Resume Next
Columns("B:K").Select
Range("B:K").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
Varr = Range("B1:K42").SpecialCells(xlCellTypeVisible).Value
ActiveSheet.ShowAllData
On Error GoTo 0
Range("B:K").Clear
Range("B1:K" & UBound(Varr, 1)).Value = Varr
End Sub

Mi raccomando di provare sempre dopo aver fatto una copia di backup dei dati originali.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: confronta righe ed elimina righe uguali

Postdi miko » 24/05/10 11:29

salve,
grazie a tutti e due per le due macro, entrambe valide, variando solo il diverso modo di approccio al problema.
mi sono soffermato sulla macro di anthony per la presenza del temine UBound nella penultima riga.
come avrete visto nel file inviato la riga 1 è uguale alla riga 23, la 2 = 24 etc.
facendo il debug con F8 ho notato che la macro non elimina al primo giro tutte le righe uguali, ma occorre ripetere la macro una seconda volta poichè UBound al primo giro assume il valore 23 invece di 22 quindi elimina le righe dalla 23 in poi e successivamente al secondo giro elimina anche la 23.
allora ho modificato la penultima linea :
Range("B1:K" & UBound(Varr, 1)).Value = Varr
con questa:
Range("B1:K" & (UBound(Varr, 1) - 1)).Value = Varr
aggiungendo -1
il risultato va bene, ma non so se il codice è corretto ed aggiungendo altre linee si avranno poi problemi.
grazie ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: confronta righe ed elimina righe uguali

Postdi Anthony47 » 24/05/10 14:26

In realta' ci sono un paio di problemi con la macro che ti ho postato, che la rendono inutilizzabile:
-il caricamento in Varr si interrompe alla prima riga duplicata
-il filtro automatico richiede una riga di etichetta campi, se manca la prima riga di dati viene interpretata come etichetta e non controllata
Avendo gia' la macro di Flash funzionante penso sia inutile proporne un' altra.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: confronta righe ed elimina righe uguali

Postdi miko » 24/05/10 16:54

ciao anthony,
forse i problemi di cui parli si riducono ad uno solo;
in effetti, la prima riga del range B-K, dove si trovano i valori, è occupata da uno shape di intestazione;
la seconda B2-K2 ho unito le celle ed inserito una X, poichè una altra macro importa i dati esterni e necessità che vi sia una prima cella piena dopo la quale inserire i valori.
se non è troppo complicato o non ti crea troppo impegno mi farebbe piacere avere la tua versione di macro.
ciao grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: confronta righe ed elimina righe uguali

Postdi Anthony47 » 25/05/10 23:41

Questa copia il filtrato su colonne di servizio che si crea appositamentee, poi elimina le colonne coi dati di origine.
Codice: Seleziona tutto
Sub UniRec()
    Columns("B:K").Select
    Selection.Insert Shift:=xlToRight
    Columns("L:U").Select
    Range("L:U").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    Range("L:U").SpecialCells(xlCellTypeVisible).Copy
    ActiveSheet.Paste Destination:=ActiveSheet.Range("B1")
    On Error Resume Next
    ActiveSheet.ShowAllData
    On Error Goto 0
    Columns("L:U").Select
    Selection.Delete Shift:=xlToLeft
End Sub

In alternativa, fai la copia dei dati filtrati e incolla su un altro foglio; o usi la macro di Flash.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: confronta righe ed elimina righe uguali

Postdi miko » 26/05/10 12:00

ciao,
ho provato con F8 la tua ultima macro, ma ricevo errore e si evidenzia la linea:
ActiveSheet.Paste Destination:=ActiveSheet.Range("B1")
ed il messaggio recita:
" ERRORE NEL METODO PASTE PER LA CLASSE WORKSHEET "
l'help non mi aiuta perchè non dice molto.
ho provato a trovare la sintassi di destination ma anche modificando la linea continuo ad avere errore.
grazie ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: confronta righe ed elimina righe uguali

Postdi Anthony47 » 27/05/10 00:37

Questo dovrebbe succedere se non hai copiato nessun valore, cioe' se in L:U non ci sono dati visibili; cosa che in genere dovrebbe essere impossibile.
Puoi controllare in quel momento cosa hai nel foglio, quale e' la parte selezionata, e quale e' la parte col contorno tratteggiato tipico di celle copiate?
Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: confronta righe ed elimina righe uguali

Postdi miko » 27/05/10 10:11

ciao anthony, ti mostro cosa accade quando si passa dalla linea:
Range("L:U").SpecialCells(xlCellTypeVisible).Copy
alla linea:
ActiveSheet.Paste Destination:=ActiveSheet.Range("B1")
Immagine
poi si blocca.
prima di queste linee tutto procede regolarmente.
da quello che capisco sembra siano differenti le aree di copia e di incolla.
saluti grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: confronta righe ed elimina righe uguali

Postdi Anthony47 » 28/05/10 01:06

Non ti devi preoccupare per le aree apparentemente diverse; mentre quello che chiami "blocco" potrebbe essere un "lungo tempo di elaborazione", riprova mentre ti fai un caffe'.
Comunque prova a modificare le due istruzioni Range("L:U").etc etc in
Range("L1:U100").etc etc (invece di 100 metti un numero definito che sia certamente piu' lungo delle righe di dati di partenza).

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: confronta righe ed elimina righe uguali

Postdi miko » 28/05/10 20:36

salve,
riprovando anche con le tue ultime indicazioni, ho fatto una flebo di caffè, excel mi dà sempre errore con questo messaggio
Immagine
l'help (?) non mi aiuta molto, e le ricerche per la sintassi della linea incriminata:
ActiveSheet.Paste Destination:=ActiveSheet.Range("B1")
non contribuiscono a risolvere il problema.
ciao grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: confronta righe ed elimina righe uguali

Postdi Anthony47 » 31/05/10 14:50

Sono perplesso, perche' se l' errore e' sulla riga che dici allora le colonne B:K dovrebbero essere vuote, mentre nell' immagine vedo un contenuto che non e' identificabile.
Cosa c' e', al momento dell' errore, ad esempio in riga 3, col B:K?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: confronta righe ed elimina righe uguali

Postdi miko » 31/05/10 15:05

ciao,
al momento dell'errore in ogni cella delle colonne B-K ci sono gli stessi valori delle corrispondenti celle delle colonne L-U;
B3=L3, C3=M3, D3=N3 etc.etc.
saluti grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "confronta righe ed elimina righe uguali":


Chi c’è in linea

Visitano il forum: patel e 5 ospiti