Rimozione di valori duplicati in Excel VBA

Questo tutorial dimostrerà come rimuovere i duplicati utilizzando il metodo RemoveDuplicates in VBA.

Metodo di rimozione dei duplicati

Quando i dati vengono importati o incollati in un foglio di lavoro Excel, spesso possono contenere valori duplicati. Potrebbe essere necessario pulire i dati in entrata e rimuovere i duplicati.

Fortunatamente, esiste un metodo semplice all'interno dell'oggetto Range di VBA che ti consente di farlo.

1 Intervallo ("A1: C8"). Rimuovi colonne duplicati: = 1, intestazione: = xl Sì

La sintassi è:

RimuoviDuplicati([Colonne],[Intestazione]

  • [Colonne] - Specificare quali colonne sono controllate per i valori duplicati. Tutte le colonne corrispondono molto per essere considerate un duplicato.
  • [Intestazione] - I dati hanno un'intestazione? xlNo (predefinito), xlSì, xlSìNoGuess

Tecnicamente, entrambi i parametri sono opzionali. Tuttavia, se non specifichi l'argomento Colonne, nessun duplicato verrà rimosso.

Il valore predefinito per Header è xlNo. Ovviamente è meglio specificare questo argomento, ma se hai una riga di intestazione, è improbabile che la riga di intestazione corrisponda come duplicato.

Rimuovi i duplicati Note sull'utilizzo

  • Prima di utilizzare il metodo RemoveDuplicates, è necessario specificare un intervallo da utilizzare.
  • Il metodo RemoveDuplicates rimuoverà tutte le righe con duplicati trovati, ma manterrà la riga originale con tutti i valori.
  • Il metodo RemoveDuplicates funziona solo su colonne e non su righe, ma il codice VBA può essere scritto per correggere questa situazione (vedi più avanti).

Dati di esempio per esempi VBA

Per mostrare come funziona il codice di esempio, vengono utilizzati i seguenti dati di esempio:

Rimuovi righe duplicate

Questo codice rimuoverà tutte le righe duplicate in base solo ai valori nella colonna A:

123 Sub RemoveDupsEx1()Intervallo ("A1: C8"). Rimuovi colonne duplicati: = 1, intestazione: = xl SìFine sottotitolo

Si noti che abbiamo definito esplicitamente l'intervallo "A1:C8". Invece puoi usare il UsedRange. UsedRange determinerà l'ultima riga e colonna dei dati utilizzata e applicherà RemoveDuplicates a quell'intero intervallo:

123 Sub RemoveDups_UsedRange()ActiveSheet.UsedRange.RemoveDuplicates Colonne:=1, Intestazione:=xlSìFine sottotitolo

UsedRange è incredibilmente utile, eliminando la necessità di definire esplicitamente l'intervallo.

Dopo aver eseguito questo codice, il tuo foglio di lavoro sarà ora simile a questo:

Si noti che poiché è stata specificata solo la colonna A (colonna 1), il duplicato "Mele" precedentemente nella riga 5 è stato rimosso. Tuttavia, la Quantità (colonna 2) è diversa.

Per rimuovere i duplicati, confrontando più colonne, possiamo specificare quelle colonne utilizzando un metodo Array.

Rimuovi i duplicati confrontando più colonne

123 Sub RemoveDups_MultColumns()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2) , Header:=xlYesFine sottotitolo

L'array dice a VBA di confrontare i dati utilizzando entrambe le colonne 1 e 2 (A e B).

Le colonne nell'array non devono essere in ordine consecutivo.

123 Sub SimpleEsempio()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(3, 1) , Header:=xlSìFine sottotitolo

In questo esempio, le colonne 1 e 3 vengono utilizzate per il confronto dei duplicati.

Questo esempio di codice utilizza tutte e tre le colonne per verificare la presenza di duplicati:

123 Sub SimpleEsempio()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3) , Header:=xlYesFine sottotitolo

Rimozione di righe duplicate da una tabella

I RemoveDuplicates possono essere applicati anche a una tabella Excel esattamente allo stesso modo. Tuttavia, la sintassi è leggermente diversa.

1234 Sub SimpleEsempio()ActiveSheet.ListObjects("Table1").DataBodyRange.RemoveDuplicates Columns:=Array(1, 3), _Intestazione:=xlSìFine sottotitolo

Ciò rimuoverà i duplicati nella tabella in base alle colonne 1 e 3 (A e C). Tuttavia, non riordina la formattazione del colore della tabella e vedrai righe vuote colorate lasciate nella parte inferiore della tabella.

Rimuovi duplicati dagli array

Se è necessario rimuovere i valori duplicati da un array, ovviamente è possibile eseguire l'output dell'array in Excel, utilizzare il metodo RemoveDuplicates e reimportare l'array.

Tuttavia, abbiamo anche scritto una procedura VBA per rimuovere i duplicati da un array.

Rimozione di duplicati da righe di dati utilizzando VBA

Il metodo RemoveDuplicates funziona solo su colonne di dati, ma con un po' di pensiero "pronto all'uso", puoi creare una procedura VBA per gestire righe di dati.

Supponiamo che i tuoi dati assomiglino a questo sul tuo foglio di lavoro:

Hai gli stessi duplicati di prima nelle colonne B ed E, ma non puoi rimuoverli usando il metodo RemoveDuplicates.

La risposta è utilizzare VBA per creare un foglio di lavoro aggiuntivo, copiare i dati in esso trasponendoli in colonne, rimuovere i duplicati e quindi copiarli nuovamente trasponendoli in righe.

12345678910111213141516171819202122232425262728293031323334353637 Duplicati secondari nelle righe()'Disattiva l'aggiornamento dello schermo e gli avvisi: vogliamo che il codice venga eseguito correttamente senza che l'utente lo veda'cosa sta succedendoApplication.ScreenUpdating = FalseApplication.DisplayAlerts = False'Aggiungi un nuovo foglio di lavoroFogli.Aggiungi dopo:=Foglio attivo'Chiama il nuovo foglio di lavoro 'CopySheet'ActiveSheet.Name = "CopySheet"'Copia i dati dal foglio di lavoro originaleFogli("DataInRows").UsedRange.Copy'Attiva il nuovo foglio che è stato creatoFogli("CopiaFoglio").Attiva'Incolla trasponi i dati in modo che siano ora in colonneActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _Falso, Trasponi:=Vero"Rimuovi i duplicati per le colonne 1 e 3"Colonne ActiveSheet.UsedRange.RemoveDuplicates:=Array(1, 3), Header _:=xlSì"Cancella i dati nel foglio di lavoro originale"Fogli("DataInRows").UsedRange.ClearContents'Copia le colonne di dati dal nuovo foglio di lavoro creatoFogli("Foglio di copia").UsedRange.Copy'Attiva il foglio originaleFogli("DataInRows").Attiva'Incolla trasporre i dati non duplicatiActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _Falso, Trasponi:=Vero'Elimina il foglio di copia - non è più necessarioFogli("Copia"). Elimina'Attiva il foglio originaleFogli("DataInRows").Attiva'Riattiva l'aggiornamento dello schermo e gli avvisiApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueFine sottotitolo

Questo codice presuppone che i dati originali nelle righe siano conservati in un foglio di lavoro chiamato "DataInRows"

Dopo aver eseguito il codice, il tuo foglio di lavoro sarà simile a questo:

Il duplicato "Mele" nella colonna E è stato ora rimosso. L'utente è tornato in una posizione pulita, senza fogli di lavoro estranei in giro e l'intero processo è stato eseguito senza problemi senza sfarfallio dello schermo o messaggi di avviso.

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave