Eliminarea valorilor duplicate în Excel VBA

Acest tutorial va arăta cum să eliminați duplicatele folosind metoda RemoveDuplicates din VBA.

Metoda RemoveDuplicates

Când datele sunt importate sau lipite într-o foaie de lucru Excel, acestea pot conține adesea valori duplicat. Poate fi necesar să curățați datele primite și să eliminați duplicatele.

Din fericire, există o metodă ușoară în obiectul Range al VBA, care vă permite să faceți acest lucru.

1 Gama („A1: C8”). RemoveDuplicates Coloane: = 1, Antet: = xlDa

Sintaxa este:

RemoveDuplicates ([Coloane], [Header]

  • [Coloane] - Specificați ce coloane sunt verificate pentru valori duplicate. Toate coloanele se potrivesc mult pentru a fi considerate un duplicat.
  • [Antet] - Datele au un antet? xlNu (implicit), xlDa, xlDaNuGuess

Din punct de vedere tehnic, ambii parametri sunt opționali. Cu toate acestea, dacă nu specificați argumentul Coloane, nu vor fi eliminate duplicate.

Valoarea implicită pentru antet este xlNu. Desigur, este mai bine să specificați acest argument, dar dacă aveți un rând de antet, este puțin probabil ca rândul de antet să se potrivească ca duplicat.

RemoveDuplicates Note de utilizare

  • Înainte de a utiliza metoda RemoveDuplicates, trebuie să specificați un interval care urmează să fie utilizat.
  • Metoda RemoveDuplicates va elimina toate rândurile cu duplicate găsite, dar va păstra rândul original cu toate valorile.
  • Metoda RemoveDuplicates funcționează numai pe coloane și nu pe rânduri, dar codul VBA poate fi scris pentru a remedia această situație (vezi mai târziu).

Exemple de date pentru exemple VBA

Pentru a arăta cum funcționează exemplul de cod, sunt utilizate următoarele exemple de date:

Eliminați rândurile duplicate

Acest cod va elimina toate rândurile duplicate numai pe baza valorilor din coloana A:

123 Sub RemoveDupsEx1 ()Gama („A1: C8”). RemoveDuplicates Coloane: = 1, Antet: = xlDaSfârșitul Sub

Observați că am definit în mod explicit Gama „A1: C8”. În schimb, poți folosi UsedRange. UsedRange va determina ultimul rând și coloană utilizate ale datelor dvs. și va aplica RemoveDuplicates întregului interval:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Coloane: = 1, Antet: = xlDaSfârșitul Sub

UsedRange este incredibil de util, eliminând necesitatea de a defini în mod explicit gama.

După rularea acestui cod, foaia dvs. de lucru va arăta astfel:

Observați că, deoarece doar coloana A (coloana 1) a fost specificată, duplicatul „Mere”, care anterior era în rândul 5, a fost eliminat. Cu toate acestea, Cantitatea (coloana 2) este diferită.

Pentru a elimina duplicatele, comparând mai multe coloane, putem specifica acele coloane folosind o metodă Array.

Eliminați duplicatele comparând mai multe coloane

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Coloane: = Matrice (1, 2), Antet: = xlDaSfârșitul Sub

Array-ul îi spune VBA să compare datele folosind ambele coloane 1 și 2 (A și B).

Coloanele din matrice nu trebuie să fie în ordine consecutivă.

123 SubExemplu simplu ()ActiveSheet.UsedRange.RemoveDuplicates Coloane: = Array (3, 1), Header: = xlYesSfârșitul Sub

În acest exemplu, coloanele 1 și 3 sunt utilizate pentru comparația duplicat.

Acest exemplu de cod folosește toate cele trei coloane pentru a verifica duplicatele:

123 SubExemplu simplu ()ActiveSheet.UsedRange.RemoveDuplicates Coloane: = Matrice (1, 2, 3), Antet: = xlDaSfârșitul Sub

Eliminarea rândurilor duplicate dintr-un tabel

RemoveDuplicates poate fi de asemenea aplicat unui tabel Excel exact în același mod. Cu toate acestea, sintaxa este ușor diferită.

1234 SubExemplu simplu ()ActiveSheet.ListObjects ("Table1"). DataBodyRange.RemoveDuplicates Coloane: = Array (1, 3), _Antet: = xlDaSfârșitul Sub

Aceasta va elimina duplicatele din tabel pe baza coloanelor 1 și 3 (A și C). Cu toate acestea, nu ordonează formatarea culorilor tabelului și veți vedea rânduri goale colorate rămase în partea de jos a mesei.

Eliminați duplicatele din matrice

Dacă trebuie să eliminați valorile duplicate dintr-o matrice, desigur, puteți să vă afișați matricea în Excel, utilizați metoda RemoveDuplicates și să reimportați matricea.

Cu toate acestea, am scris și o procedură VBA pentru a elimina duplicatele dintr-o matrice.

Eliminarea duplicatelor din rândurile de date folosind VBA

Metoda RemoveDuplicates funcționează numai pe coloane de date, dar cu o gândire „out of the box”, puteți crea o procedură VBA pentru a face față rândurilor de date.

Să presupunem că datele dvs. arată astfel în foaia de lucru:

Aveți aceleași duplicate ca înainte în coloanele B și E, dar nu le puteți elimina folosind metoda RemoveDuplicates.

Răspunsul este să utilizați VBA pentru a crea o foaie de lucru suplimentară, copiați datele în ea transpunându-le în coloane, eliminați duplicatele și apoi copiați-le înapoi transpunându-le în rânduri.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()„Dezactivați actualizarea ecranului și alertele - dorim ca codul să ruleze fără probleme, fără ca utilizatorul să vadă'Ce se întâmplăApplication.ScreenUpdating = FalsApplication.DisplayAlerts = Fals'Adăugați o nouă foaie de lucruSheets.Add After: = ActiveSheet„Apelați noua foaie de lucru„ CopySheet ”ActiveSheet.Name = "CopySheet"'Copiați datele din foaia de lucru originalăFoi de calcul („DataInRows”). UsedRange.Copy'Activați noua foaie care a fost creatăFoi de calcul („CopySheet”). Activați'Lipiți transpuneți datele astfel încât să fie acum în coloaneActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Fals, transpune: = Adevărat'Eliminați duplicatele pentru coloanele 1 și 3ActiveSheet.UsedRange.RemoveDuplicates Coloane: = Array (1, 3), Header _: = xlDa„Ștergeți datele din foaia de lucru originalăFoi de calcul („DataInRows”). UsedRange.ClearContents'Copiați coloanele de date din noua foaie de lucru creatăFoi de calcul („Copysheet”). UsedRange.Copy'Activați foaia originalăFoi de calcul („DataInRows”). Activați„Lipiți transpuneți datele care nu sunt duplicateActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Fals, transpune: = Adevărat„Ștergeți foaia de copiere - nu mai este necesarăFoi de calcul („Copysheet”). Ștergeți'Activați foaia originalăFoi de calcul („DataInRows”). Activați'Reveniți la actualizarea și alertele ecranuluiApplication.ScreenUpdating = AdevăratApplication.DisplayAlerts = AdevăratSfârșitul Sub

Acest cod presupune că datele originale din rânduri sunt păstrate pe o foaie de lucru numită „DataInRows”

După rularea codului, foaia dvs. de lucru va arăta astfel:

Duplicatul „Mere” din coloana E a fost acum eliminat. Utilizatorul se întoarce într-o poziție curată, fără foi de lucru străine agățate și întregul proces a fost realizat fără probleme, fără pâlpâire a ecranului sau mesaje de avertizare.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave