Fjernelse af dublerede værdier i Excel VBA

Denne vejledning viser, hvordan du fjerner dubletter ved hjælp af RemoveDuplicates -metoden i VBA.

RemoveDuplicates -metode

Når data importeres eller indsættes i et Excel -regneark, kan det ofte indeholde dublerede værdier. Du skal muligvis rense de indgående data og fjerne dubletter.

Heldigvis er der en let metode inden for Range -objektet i VBA, som giver dig mulighed for at gøre dette.

1 Område ("A1: C8"). RemoveDuplicates -kolonner: = 1, Header: = xlJa

Syntaks er:

RemoveDuplicates ([Kolonner], [Header]

  • [Kolonner] - Angiv hvilke kolonner der kontrolleres for dublerede værdier. Alle kolonner matcher meget for at blive betragtet som en kopi.
  • [Header] - Har data en overskrift? xlNo (standard), xlYes, xlYesNoGuess

Teknisk set er begge parametre valgfrie. Men hvis du ikke angiver kolonnen -argumentet, fjernes ingen dubletter.

Standardværdien for Header er xlNo. Selvfølgelig er det bedre at angive dette argument, men hvis du har en overskriftsrække, er det usandsynligt, at overskriftsrækken vil matche som en duplikat.

Fjern Dubletter Brugsanvisninger

  • Inden du bruger metoden RemoveDuplicates, skal du angive et område, der skal bruges.
  • Metoden RemoveDuplicates fjerner alle rækker med fundne dubletter, men den originale række bevares med alle værdier.
  • Metoden RemoveDuplicates fungerer kun på kolonner og ikke på rækker, men VBA -kode kan skrives for at rette op på denne situation (se senere).

Prøvedata til VBA -eksempler

For at vise hvordan eksempelkoden fungerer, bruges følgende eksempeldata:

Fjern dubletter

Denne kode fjerner alle dublerede rækker, der kun er baseret på værdier i kolonne A:

123 Sub RemoveDupsEx1 ()Område ("A1: C8"). RemoveDuplicates -kolonner: = 1, Header: = xlJaAfslut Sub

Bemærk, at vi eksplicit definerede området "A1: C8". I stedet kan du bruge UsedRange. UsedRange bestemmer den sidst anvendte række og kolonne i dine data og anvender RemoveDuplicates på hele området:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates -kolonner: = 1, Header: = xlJaAfslut Sub

UsedRange er utrolig nyttig, hvilket fjerner behovet for, at du eksplicit definerer området.

Efter at have kørt denne kode vil dit regneark nu se sådan ud:

Bemærk, at fordi kun kolonne A (kolonne 1) blev angivet, er dubletten 'Æbler' tidligere i række 5 blevet fjernet. Mængden (kolonne 2) er imidlertid forskellig.

For at fjerne dubletter ved at sammenligne flere kolonner kan vi angive disse kolonner ved hjælp af en Array -metode.

Fjern dubletter ved at sammenligne flere kolonner

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates -kolonner: = Array (1, 2), Header: = xlJaAfslut Sub

Arrayen fortæller VBA at sammenligne data ved hjælp af både kolonne 1 og 2 (A og B).

Kolonnerne i arrayet behøver ikke at være i rækkefølge.

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates -kolonner: = Array (3, 1), Header: = xlJaAfslut Sub

I dette eksempel bruges kolonner 1 og 3 til den dobbelte sammenligning.

Dette kodeeksempel bruger alle tre kolonner til at kontrollere for dubletter:

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates -kolonner: = Array (1, 2, 3), Header: = xlJaAfslut Sub

Fjernelse af dubletter i en tabel

RemoveDuplicates kan også anvendes på en Excel -tabel på nøjagtig samme måde. Imidlertid er syntaksen en smule anderledes.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Tabel1"). DataBodyRange.RemoveDuplicates -kolonner: = Array (1, 3), _Header: = xlJaAfslut Sub

Dette fjerner dubletterne i tabellen baseret på kolonner 1 og 3 (A og C). Det rydder imidlertid ikke op i farveformateringen af ​​tabellen, og du vil se farvede, tomme rækker efterladt i bunden af ​​tabellen.

Fjern dubletter fra arrays

Hvis du har brug for at fjerne dublerede værdier fra et array, kan du selvfølgelig output dit array til Excel, bruge metoden RemoveDuplicates og importere arrayet igen.

Vi skrev imidlertid også en VBA -procedure for at fjerne dubletter fra en matrix.

Fjernelse af dubletter fra datarækker ved hjælp af VBA

RemoveDuplicates -metoden fungerer kun på datakolonner, men med noget 'out of the box' -tænkning kan du oprette en VBA -procedure til at håndtere rækker af data.

Antag, at dine data ser sådan ud på dit regneark:

Du har de samme dubletter som før i kolonner B og E, men du kan ikke fjerne dem ved hjælp af metoden RemoveDuplicates.

Svaret er at bruge VBA til at oprette et ekstra regneark, kopiere dataene til det og transponere det i kolonner, fjerne dubletterne og derefter kopiere det tilbage til at transponere det tilbage til rækker.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()'Slå skærmopdatering og advarsler fra - vi vil have, at koden kører problemfrit, uden at brugeren ser det'hvad sker derApplication.ScreenUpdating = FalskApplication.DisplayAlerts = Falsk'Tilføj et nyt regnearkArk. Tilføj efter: = ActiveSheet'Kald det nye regneark' CopySheet 'ActiveSheet.Name = "CopySheet"'Kopier dataene fra det originale regnearkArk ("DataInRows"). UsedRange.Copy'Aktiver det nye ark, der er oprettetArk ("CopySheet"). Aktiver'Indsæt transponer dataene, så de nu er i kolonnerActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Falsk, Transponere: = Sandt'Fjern dubletterne til kolonne 1 og 3ActiveSheet.UsedRange.RemoveDuplicates -kolonner: = Array (1, 3), Header _: = xlJa'Ryd dataene i det originale regnearkArk ("DataInRows"). UsedRange.ClearContents'Kopier kolonnerne med data fra det nye regneark, der er oprettetArk ("Kopiark"). UsedRange.Copy'Aktiver det originale arkArk ("DataInRows"). Aktiver'Indsæt transponer de ikke-dublerede dataActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Falsk, Transponere: = Sandt'Slet kopiarket - ikke længere nødvendigtArk ("Kopiark"). Slet'Aktiver det originale arkArk ("DataInRows"). Aktiver'Slå skærmopdatering og advarsler tilbageApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueAfslut Sub

Denne kode forudsætter, at de originale data i rækker gemmes på et regneark kaldet 'DataInRows'

Når koden er kørt, ser dit regneark sådan ud:

"Æblerne" -duplikatet i kolonne E er nu fjernet. Brugeren er tilbage i en ren position, uden at fremmede regneark hænger rundt, og hele processen er blevet udført uden problemer på skærmen, der flimrer eller advarsler.

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave