Korduvate väärtuste eemaldamine Excel VBA -s

Lang L: none (table-of-contents)

See õpetus näitab, kuidas duplikaate eemaldada, kasutades VBA -s meetodit RemoveDuplicates.

Meetod RemoveDuplicates

Kui andmed imporditakse või kleebitakse Exceli töölehele, võivad need sageli sisaldada duplikaatväärtusi. Võimalik, et peate sissetulevad andmed puhastama ja duplikaadid eemaldama.

Õnneks on VBA vahemiku objektis lihtne meetod, mis võimaldab seda teha.

1 Vahemik („A1: C8”). RemoveDuplicates Veerud: = 1, Päis: = xlJah

Süntaks on:

RemoveDuplicates ([Veerud], [Päis]

  • [Veerud] - Määrake, milliseid veerge duplikaatväärtuste suhtes kontrollitakse. Kõik veerud vastavad paljuski duplikaadiks.
  • [Päis] - Kas andmetel on päis? xlNo (vaikimisi), xlJah, xlYesNoGuess

Tehniliselt on mõlemad parameetrid valikulised. Kui te aga veergu Veerud ei määra, duplikaate ei eemaldata.

Päise vaikeväärtus on xlNo. Muidugi on parem seda argumenti täpsustada, kuid kui teil on päise rida, on ebatõenäoline, et päise rida kattub duplikaadina.

RemoveDuplicates Usage Notes

  • Enne meetodi RemoveDuplicates kasutamist peate määrama kasutatava vahemiku.
  • Meetod RemoveDuplicates eemaldab kõik leitud duplikaatide read, kuid säilitab algse rea koos kõigi väärtustega.
  • Meetod RemoveDuplicates töötab ainult veergudel, mitte ridadel, kuid selle olukorra parandamiseks saab kirjutada VBA -koodi (vt hiljem).

VBA näidete näidisandmed

Näidiskoodi toimimise näitamiseks kasutatakse järgmisi näidisandmeid:

Eemalda duplikaatridad

See kood eemaldab kõik duplikaatridad, mis põhinevad ainult veeru A väärtustel:

123 Sub RemoveDupsEx1 ()Vahemik („A1: C8”). RemoveDuplicates Veerud: = 1, Päis: = xlJahEnd Sub

Pange tähele, et määratlesime selgesõnaliselt vahemiku „A1: C8”. Selle asemel võite kasutada UsedRange'i. UsedRange määrab kindlaks teie andmete viimati kasutatud rea ja veeru ning rakendab RemoveDuplicates kogu sellele vahemikule:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Veerud: = 1, Päis: = xl JahEnd Sub

UsedRange on uskumatult kasulik, kõrvaldades vajaduse vahemikku selgesõnaliselt määratleda.

Pärast nende koodide käivitamist näeb teie tööleht nüüd välja selline:

Pange tähele, et kuna oli määratud ainult veerg A (veerg 1), on varem reas 5 olev õunte duplikaat eemaldatud. Kogus (veerg 2) on aga erinev.

Duplikaatide eemaldamiseks, võrreldes mitut veergu, saame need veerud massiivi meetodil määrata.

Eemalda duplikaadid mitme veeru võrdlemisel

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Veerud: = Massiiv (1, 2), Päis: = xl JahEnd Sub

Massiiv käsib VBA -l võrrelda andmeid, kasutades nii veerge 1 kui ka 2 (A ja B).

Massiivi veerud ei pea olema järjestuses.

123 Alamlihtne näide ()ActiveSheet.UsedRange.RemoveDuplicates Veerud: = Massiiv (3, 1), Päis: = xl JahEnd Sub

Selles näites kasutatakse duplikaatide võrdlemiseks veerge 1 ja 3.

See koodinäide kasutab duplikaatide kontrollimiseks kõiki kolme veergu.

123 Alamlihtne näide ()ActiveSheet.UsedRange.RemoveDuplicates Veerud: = Massiiv (1, 2, 3), Päis: = xl JahEnd Sub

Korduvate ridade eemaldamine tabelist

RemoveDuplicates saab rakendada ka Exceli tabelile täpselt samamoodi. Süntaks on aga pisut erinev.

1234 Alamlihtne näide ()ActiveSheet.ListObjects ("Tabel1"). DataBodyRange.RemoveDuplicates Columns: = Massiiv (1, 3), _Päis: = xlJahEnd Sub

See eemaldab veergudel 1 ja 3 (A ja C) olevad duplikaadid tabelist. Kuid see ei korrasta tabeli värvivormingut ja näete tabeli allosas värvilisi tühje ridu.

Eemaldage massiividest duplikaadid

Kui teil on vaja massiivist duplikaatväärtused eemaldada, saate muidugi oma massiivi Excelisse väljastada, kasutada meetodit RemoveDuplicates ja massiivi uuesti importida.

Kuid me kirjutasime ka VBA protseduuri duplikaatide eemaldamiseks massiivist.

Duplikaatide eemaldamine andmerealt VBA abil

Meetod RemoveDuplicates töötab ainult andmaveergudel, kuid mõningase „kastist väljas” mõttega saate luua andmeridadega tegelemiseks VBA -protseduuri.

Oletame, et teie andmed näevad teie töölehel välja järgmised:

Teil on samad duplikaadid nagu veergudes B ja E, kuid te ei saa neid RemoveDuplicates meetodiga eemaldada.

Vastus on kasutada VBA -d täiendava töölehe loomiseks, andmete kopeerimiseks sinna, veergude ülekandmiseks, duplikaatide eemaldamiseks ja seejärel tagasi kopeerimiseks, ridadesse ülevõtmiseks.

12345678910111213141516171819202122232425262728293031323334353637 AlamduplikaadidInRows ()„Lülitage ekraani värskendamine ja hoiatused välja - tahame, et kood töötaks sujuvalt, ilma et kasutaja seda näeks'mis toimubApplication.ScreenUpdating = ValeApplication.DisplayAlerts = Vale'Lisage uus töölehtSheets.Add After: = ActiveSheet"Helistage uuele töölehele" CopySheet "ActiveSheet.Name = "CopySheet"'Kopeerige andmed algselt tööleheltArvutustabelid ("DataInRows"). UsedRange.Copy'Aktiveerige loodud uus lehtArvutustabelid ("CopySheet"). Aktiveerige„Kleepige andmed üle nii, et need oleksid nüüd veergudesActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Vale, ülevõtmine: = tõsi„Eemaldage veergude 1 ja 3 duplikaadidActiveSheet.UsedRange.RemoveDuplicates Columns: = Massiiv (1, 3), päis _: = xlJah'Kustutage andmed algselt tööleheltArvutustabelid ("DataInRows"). UsedRange.ClearContents„Kopeerige uuele töölehele andmete veerudArvutustabelid ("Copysheet"). UsedRange.Copy'Aktiveerige algne lehtArvutustabelid ("DataInRows"). Aktiveerige„Kopeeri, et mitte duplikaatandmed üle võttaActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Vale, ülevõtmine: = tõsi"Kustutage koopialeht - pole enam vajaArvutustabelid ("Copysheet"). Kustuta'Aktiveerige originaallehtArvutustabelid ("DataInRows"). Aktiveerige„Lülitage ekraani värskendamine ja hoiatused uuesti sisseApplication.ScreenUpdating = TõsiApplication.DisplayAlerts = TõsiEnd Sub

See kood eeldab, et ridade algandmeid hoitakse töölehel nimega „DataInRows”

Pärast koodi käivitamist näeb teie tööleht välja selline:

Veerus E olev õunte duplikaat on nüüd eemaldatud. Kasutaja on tagasi puhtas asendis, ilma kõrvaliste töölehtedeta rippumas ja kogu protsess on sujuvalt tehtud ilma ekraani värelevate või hoiatavate teadeteta.

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave