Fjerne dupliserte verdier i Excel VBA

Denne opplæringen vil demonstrere hvordan du fjerner duplikater ved hjelp av RemoveDuplicates -metoden i VBA.

RemoveDuplicates -metode

Når data importeres eller limes inn i et Excel -regneark, kan det ofte inneholde dupliserte verdier. Du må kanskje rense innkommende data og fjerne duplikater.

Heldigvis er det en enkel metode innenfor Range -objektet til VBA som lar deg gjøre dette.

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

Syntaks er:

RemoveDuplicates ([Kolonner], [Header]

  • [Kolonner] - Angi hvilke kolonner som er sjekket for dupliserte verdier. Alle kolonner samsvarer mye for å bli sett på som en duplikat.
  • [Overskrift] - Har data en overskrift? xlNo (standard), xlJa, xlYesNoGuess

Teknisk sett er begge parameterne valgfrie. Imidlertid, hvis du ikke spesifiserer argumentet Kolonner, blir ingen duplikater fjernet.

Standardverdien for topptekst er xlNo. Selvfølgelig er det bedre å spesifisere dette argumentet, men hvis du har en overskriftsrad, er det lite sannsynlig at overskriftsraden vil matche som en duplikat.

RemoveDuplicates bruksmerknader

  • Før du bruker RemoveDuplicates -metoden, må du angi et område som skal brukes.
  • RemoveDuplicates -metoden fjerner alle rader med dubletter funnet, men den opprinnelige raden beholder alle verdiene.
  • RemoveDuplicates -metoden fungerer bare på kolonner og ikke på rader, men VBA -kode kan skrives for å rette opp denne situasjonen (se senere).

Eksempeldata for VBA -eksempler

For å vise hvordan eksempelkoden fungerer, brukes følgende eksempeldata:

Fjern dupliserte rader

Denne koden fjerner alle dupliserte rader bare basert på verdier i kolonne A:

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

Legg merke til at vi eksplisitt definerte området "A1: C8". I stedet kan du bruke UsedRange. UsedRange vil bestemme den siste brukte raden og kolonnen med dataene dine og bruke RemoveDuplicates på hele området:

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

UsedRange er utrolig nyttig, og fjerner behovet for å eksplisitt definere området.

Etter at du har kjørt denne koden, vil regnearket nå se slik ut:

Legg merke til at fordi bare kolonne A (kolonne 1) ble spesifisert, er duplikatet ‘Epler’ tidligere i rad 5 blitt fjernet. Mengden (kolonne 2) er imidlertid forskjellig.

For å fjerne duplikater, sammenligne flere kolonner, kan vi spesifisere disse kolonnene ved hjelp av en Array -metode.

Fjern duplikater ved å sammenligne flere kolonner

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

Arrayen forteller VBA å sammenligne dataene ved å bruke både kolonne 1 og 2 (A og B).

Kolonnene i matrisen trenger ikke å være i rekkefølge.

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

I dette eksemplet brukes kolonnene 1 og 3 for den dupliserte sammenligningen.

Dette kodeeksemplet bruker alle tre kolonnene for å se etter duplikater:

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

Fjerne dupliserte rader fra en tabell

RemoveDuplicates kan også brukes på en Excel -tabell på nøyaktig samme måte. Imidlertid er syntaksen litt annerledes.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Tabell1"). DataBodyRange.RemoveDuplicates -kolonner: = Array (1, 3), _Overskrift: = xlJaSlutt Sub

Dette vil fjerne duplikatene i tabellen basert på kolonne 1 og 3 (A og C). Imidlertid rydder det ikke opp i fargeformateringen av tabellen, og du vil se fargede, tomme rader igjen på bunnen av tabellen.

Fjern duplikater fra matriser

Hvis du trenger å fjerne dupliserte verdier fra en matrise, kan du selvfølgelig sende matrisen til Excel, bruke RemoveDuplicates-metoden og importere matrisen på nytt.

Imidlertid skrev vi også en VBA -prosedyre for å fjerne duplikater fra en matrise.

Fjerne duplikater fra datarader ved hjelp av VBA

RemoveDuplicates -metoden fungerer bare på datakolonner, men med litt "out of the box" -tenkning kan du opprette en VBA -prosedyre for å håndtere datarader.

Anta at dataene dine ser slik ut på regnearket:

Du har de samme duplikatene som før i kolonnene B og E, men du kan ikke fjerne dem ved hjelp av RemoveDuplicates -metoden.

Svaret er å bruke VBA til å lage et ekstra regneark, kopiere dataene inn i det og transponere det i kolonner, fjerne duplikatene og deretter kopiere det tilbake til å transponere det tilbake til rader.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()Slå av skjermoppdatering og varsler - vi vil at koden skal kjøre jevnt uten at brukeren ser'hva skjerApplication.ScreenUpdating = FalskApplication.DisplayAlerts = Falsk'Legg til et nytt regnearkArk.Legg til etter: = ActiveSheet'Kall det nye regnearket' CopySheet 'ActiveSheet.Name = "CopySheet"'Kopier dataene fra det originale regnearketArk ("DataInRows"). UsedRange.Copy'Aktiver det nye arket som er opprettetArk ("CopySheet"). AktiverLim inn transponer dataene slik at de nå er i kolonnerActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Falsk, Transponere: = Sant'Fjern duplikatene for kolonne 1 og 3ActiveSheet.UsedRange.RemoveDuplicates -kolonner: = Array (1, 3), Header _: = xlJa'Fjern dataene i det originale regnearketArk ("DataInRows"). UsedRange.ClearContents'Kopier kolonnene med data fra det nye regnearket som ble opprettetArk ("Kopiark"). UsedRange.Copy'Aktiver det originale arketArk ("DataInRows"). Aktiver'Lim inn transponere de ikke-dupliserte dataeneActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Falsk, Transponere: = Sant'Slett kopiarket - ikke lenger nødvendigArk ("Kopiark"). Slett'Aktiver det originale arketArk ("DataInRows"). AktiverSlå på skjermoppdatering og varslerApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueSlutt Sub

Denne koden forutsetter at de originale dataene i rader er lagret på et regneark kalt 'DataInRows'

Etter at du har kjørt koden, vil regnearket ditt se slik ut:

"Epler" -duplikatet i kolonne E er nå fjernet. Brukeren er tilbake i en ren posisjon, uten at fremmede regneark henger rundt, og hele prosessen har blitt utført jevnt uten skjermflimmer eller advarselsmeldinger.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave