Päällekkäisten arvojen poistaminen Excel VBA: ssa

Tämä opetusohjelma osoittaa, miten kaksoiskappaleet poistetaan VBA: n RemoveDuplicates -menetelmällä.

RemoveDuplicates Method

Kun tietoja tuodaan tai liitetään Excel -laskentataulukkoon, ne voivat usein sisältää päällekkäisiä arvoja. Sinun on ehkä puhdistettava saapuvat tiedot ja poistettava kaksoiskappaleet.

Onneksi VBA: n Range -objektissa on helppo menetelmä, jonka avulla voit tehdä tämän.

1 Alue ("A1: C8"). RemoveDuplicates Sarakkeet: = 1, Otsikko: = xlKyllä

Syntaksi on:

RemoveDuplicates ([Sarakkeet], [Otsikko]

  • [Sarakkeet] - Määritä, mitkä sarakkeet tarkistetaan kaksoiskappaleiden varalta. Kaikki sarakkeet vastaavat pitkälti päällekkäisyyttä.
  • [Otsikko] - Onko tiedoissa otsikko? xlEi (oletus), xlKyllä, xlYesNoGuess

Teknisesti molemmat parametrit ovat valinnaisia. Jos et kuitenkaan määritä Sarakkeet -argumenttia, kaksoiskappaleita ei poisteta.

Otsikon oletusarvo on xlNo. Tietenkin on parempi määrittää tämä argumentti, mutta jos sinulla on otsikkorivi, on epätodennäköistä, että otsikkorivi vastaa päällekkäisyyttä.

RemoveDuplicates Käyttöhuomautukset

  • Ennen RemoveDuplicates -menetelmän käyttöä sinun on määritettävä käytettävä alue.
  • RemoveDuplicates -menetelmä poistaa kaikki rivit, joilla on kaksoiskappaleita, mutta säilyttää alkuperäisen rivin ja kaikki arvot.
  • RemoveDuplicates -menetelmä toimii vain sarakkeissa eikä riveillä, mutta VBA -koodi voidaan kirjoittaa tilanteen korjaamiseksi (katso myöhemmin).

Esimerkkitiedot VBA -esimerkeille

Esimerkkikoodin toimivuuden osoittamiseksi käytetään seuraavia esimerkkitietoja:

Poista päällekkäiset rivit

Tämä koodi poistaa kaikki päällekkäiset rivit, jotka perustuvat vain sarakkeen A arvoihin:

123 Sub RemoveDupsEx1 ()Alue ("A1: C8"). RemoveDuplicates Sarakkeet: = 1, Otsikko: = xlKylläEnd Sub

Huomaa, että määritimme nimenomaisesti alueen "A1: C8". Sen sijaan voit käyttää UsedRangea. UsedRange määrittää datasi viimeksi käytetyn rivin ja sarakkeen ja käyttää RemoveDuplicates -kohtaa koko alueella:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Sarakkeet: = 1, Otsikko: = xlKylläEnd Sub

UsedRange on uskomattoman hyödyllinen, joten sinun ei tarvitse erikseen määritellä aluetta.

Kun olet suorittanut nämä koodit, laskentataulukosi näyttää nyt tältä:

Huomaa, että koska vain sarake A (sarake 1) määritettiin, omenat -kaksoiskappale aiemmin riviltä 5 on poistettu. Määrä (sarake 2) on kuitenkin erilainen.

Jos haluat poistaa päällekkäisyyksiä vertaamalla useita sarakkeita, voimme määrittää nämä sarakkeet Array -menetelmällä.

Poista kaksoiskappaleet vertaamalla useita sarakkeita

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

Taulukko kehottaa VBA: ta vertaamaan tietoja käyttämällä sekä sarakkeita 1 että 2 (A ja B).

Taulukon sarakkeiden ei tarvitse olla peräkkäisessä järjestyksessä.

123 Yksinkertainen osaesimerkki ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = Array (3, 1), Header: = xlYesEnd Sub

Tässä esimerkissä sarakkeita 1 ja 3 käytetään kaksoiskappalevertailussa.

Tässä koodiesimerkissä käytetään kaikkia kolmea saraketta päällekkäisyyksien tarkistamiseen:

123 Yksinkertainen osaesimerkki ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = Array (1, 2, 3), Header: = xlYesEnd Sub

Päällekkäisten rivien poistaminen taulukosta

RemoveDuplicates voidaan soveltaa myös Excel -taulukkoon täsmälleen samalla tavalla. Syntaksi on kuitenkin hieman erilainen.

1234 Yksinkertainen osaesimerkki ()ActiveSheet.ListObjects ("Table1"). DataBodyRange.RemoveDuplicates Columns: = Array (1, 3), _Otsikko: = xlKylläEnd Sub

Tämä poistaa kaksoiskappaleet taulukosta sarakkeiden 1 ja 3 (A ja C) perusteella. Se ei kuitenkaan siivoa taulukon värimuotoa, ja näet värilliset tyhjät rivit, jotka jäävät taulukon alareunaan.

Poista kaksoiskappaleet taulukosta

Jos sinun on poistettava päällekkäiset arvot taulukosta, voit tietysti lähettää taulukon Exceliin, käyttää RemoveDuplicates-menetelmää ja tuoda taulukon uudelleen.

Kirjoitimme kuitenkin myös VBA -menettelyn kaksoiskappaleiden poistamiseksi taulukosta.

Kaksoiskappaleiden poistaminen tietoriviltä VBA: n avulla

RemoveDuplicates -menetelmä toimii vain tietosarakkeilla, mutta joidenkin "out of the box" -ajattelujen avulla voit luoda VBA -menettelyn tietorivien käsittelemiseksi.

Oletetaan, että tiedot näyttävät tältä laskentataulukollasi:

Sinulla on samat kopiot kuin aiemmin sarakkeissa B ja E, mutta et voi poistaa niitä RemoveDuplicates -menetelmällä.

Vastaus on luoda VBA: n avulla ylimääräinen laskentataulukko, kopioida tiedot siihen saattamalla se sarakkeisiin, poistaa kaksoiskappaleet ja kopioida se sitten takaisin siirtämällä se takaisin riveille.

12345678910111213141516171819202122232425262728293031323334353637 Alikopiot InRows ()'Poista näytön päivitys ja hälytykset käytöstä - haluamme, että koodi toimii sujuvasti ilman, että käyttäjä näkee'mitä tapahtuuApplication.ScreenUpdating = VääräApplication.DisplayAlerts = Väärä'Lisää uusi laskentataulukkoSheets.Add After: = ActiveSheet'Soita uudelle laskentataulukolle' CopySheet 'ActiveSheet.Name = "CopySheet"'Kopioi tiedot alkuperäisestä laskentataulukostaSheets ("DataInRows"). UsedRange.Copy'Aktivoi uusi luotu taulukkoSheets ("CopySheet"). Aktivoi'Liitä transponoi tiedot niin, että ne ovat nyt sarakkeissaActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _False, Transpose: = TottaPoista sarakkeiden 1 ja 3 kaksoiskappaleetActiveSheet.UsedRange.RemoveDuplicates Columns: = Array (1, 3), Header _: = xlKyllä'Tyhjennä tiedot alkuperäisestä laskentataulukostaSheets ("DataInRows"). UsedRange.ClearContentsKopioi datasarakkeet luodusta uudesta laskentataulukostaSheets ("Copysheet"). UsedRange.Copy'Aktivoi alkuperäinen arkkiSheets ("DataInRows"). Aktivoi'Liitä transponoi ei-päällekkäiset tiedotActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _False, Transpose: = Totta'Poista kopioarkki - ei enää tarvitaSheets ("Copysheet"). Poista'Aktivoi alkuperäinen arkkiSheets ("DataInRows"). AktivoiOta näytön päivitys ja hälytykset uudelleen käyttöönApplication.ScreenUpdating = TottaApplication.DisplayAlerts = TottaEnd Sub

Tämä koodi olettaa, että rivien alkuperäiset tiedot säilytetään DataInRows -laskentataulukolla

Kun olet suorittanut koodin, laskentataulukosi näyttää tältä:

Omenat -kopio sarakkeesta E on nyt poistettu. Käyttäjä on palannut puhtaaseen asentoon, eikä vieraita laskentataulukoita roiku ympärillä, ja koko prosessi on tehty sujuvasti ilman näytön välkkymistä tai varoitusviestejä.

wave wave wave wave wave