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ä.

Tulet auttaa kehittämään sivuston jakaminen sivu ystävillesi

wave wave wave wave wave