Odstránenie duplicitných hodnôt v programe Excel VBA

Tento tutoriál ukáže, ako odstrániť duplikáty pomocou metódy RemoveDuplicates vo VBA.

Metóda RemoveDuplicates

Keď sa údaje importujú alebo prilepia do pracovného hárka programu Excel, často môžu obsahovať duplicitné hodnoty. Možno budete musieť vyčistiť prichádzajúce údaje a odstrániť duplikáty.

Našťastie v objekte Range objektu VBA existuje jednoduchá metóda, ktorá vám to umožňuje.

1 Rozsah („A1: C8“). Odstrániť duplikáty stĺpcov: = 1, hlavička: = xlÁno

Syntax je:

RemoveDuplicates ([stĺpce], [hlavička]

  • [Stĺpce] - Zadajte, v ktorých stĺpcoch sa kontrolujú duplicitné hodnoty. Všetky stĺpce sa veľmi zhodujú, aby sa považovali za duplikáty.
  • [Hlavička] - Majú údaje hlavičku? xlNo (predvolené), xlYes, xlYesNoGuess

Technicky sú oba parametre voliteľné. Ak však nezadáte argument Stĺpce, nebudú odstránené žiadne duplikáty.

Predvolená hodnota pre hlavičku je xlNo. Tento argument je samozrejme lepšie špecifikovať, ale ak máte riadok hlavičky, je nepravdepodobné, že sa bude zhodovať ako duplikát.

RemoveDuplicates Usage Notes

  • Pred použitím metódy RemoveDuplicates musíte zadať rozsah, ktorý sa má použiť.
  • Metóda RemoveDuplicates odstráni všetky riadky s nájdenými duplicitami, ale zachová pôvodný riadok so všetkými hodnotami.
  • Metóda RemoveDuplicates funguje iba na stĺpcoch a nie na riadkoch, ale na opravu tejto situácie je možné napísať kód VBA (pozri neskôr).

Ukážkové údaje pre príklady VBA

Aby sa ukázalo, ako príkladový kód funguje, používajú sa nasledujúce ukážkové údaje:

Odstráňte duplicitné riadky

Tento kód odstráni všetky duplicitné riadky iba na základe hodnôt v stĺpci A:

123 Sub RemoveDupsEx1 ()Rozsah („A1: C8“). Odstrániť duplikáty stĺpcov: = 1, hlavička: = xlÁnoKoniec pod

Všimnite si, že sme výslovne definovali rozsah „A1: C8“. Namiesto toho môžete použiť UsedRange. Použitý rozsah určí posledný použitý riadok a stĺpec vašich údajov a použije príkaz RemoveDuplicates na celý tento rozsah:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates stĺpce: = 1, hlavička: = xlÁnoKoniec pod

UsedRange je neuveriteľne užitočný, pretože odstraňuje potrebu explicitne definovať rozsah.

Po spustení týchto kódov bude váš pracovný hárok teraz vyzerať takto:

Všimnite si toho, pretože pretože bol zadaný iba stĺpec A (stĺpec 1), duplikát „Jablká“ predtým v riadku 5 bol odstránený. Množstvo (stĺpec 2) je však odlišné.

Ak chcete odstrániť duplikáty a porovnať viacero stĺpcov, môžeme tieto stĺpce určiť pomocou metódy Array.

Odstráňte duplikáty porovnaním viacerých stĺpcov

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates stĺpce: = Array (1, 2), Header: = xlYesKoniec pod

Pole hovorí VBA, aby porovnala údaje pomocou stĺpcov 1 a 2 (A a B).

Stĺpce v poli nemusia byť v poradí za sebou.

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates stĺpce: = Array (3, 1), Header: = xlYesKoniec pod

V tomto prípade sa na duplicitné porovnanie používajú stĺpce 1 a 3.

Tento príklad kódu používa na kontrolu duplikátov všetky tri stĺpce:

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates stĺpce: = Array (1, 2, 3), Header: = xlYesKoniec pod

Odstránenie duplicitných riadkov z tabuľky

RemoveDuplicates možno tiež použiť na tabuľku programu Excel úplne rovnakým spôsobom. Syntax je však mierne odlišná.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Table1"). DataBodyRange.RemoveDuplicates stĺpce: = pole (1, 3), _Hlavička: = xlÁnoKoniec pod

Tým sa odstránia duplikáty v tabuľke na základe stĺpcov 1 a 3 (A a C). Neupraví to však farebné formátovanie tabuľky a v spodnej časti tabuľky uvidíte farebné prázdne riadky.

Odstráňte duplikáty z polí

Ak potrebujete z poľa odstrániť duplicitné hodnoty, svoje pole môžete samozrejme odoslať do programu Excel, použiť metódu RemoveDuplicates a pole znova importovať.

Napísali sme však aj postup VBA na odstránenie duplikátov z poľa.

Odstránenie duplikátov z riadkov údajov pomocou VBA

Metóda RemoveDuplicates funguje iba na stĺpcoch údajov, ale s trochou myslenia „vybaleného z krabice“ môžete vytvoriť postup VBA, ktorý sa bude zaoberať riadkami údajov.

Predpokladajme, že vaše údaje vo vašom hárku vyzerajú takto:

V stĺpcoch B a E máte rovnaké duplikáty ako predtým, ale nemôžete ich odstrániť pomocou metódy RemoveDuplicates.

Odpoveďou je použiť VBA na vytvorenie ďalšieho pracovného hárka, skopírovať do neho údaje, transponovať ich do stĺpcov, odstrániť duplikáty a potom skopírovať späť a transponovať späť do riadkov.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()„Vypnite aktualizáciu obrazovky a upozornenia - chceme, aby kód bežal hladko bez toho, aby to používateľ videl'čo sa dejeApplication.ScreenUpdating = FalseApplication.DisplayAlerts = False„Pridajte nový pracovný listSheets.Add After: = ActiveSheet„Zavolajte nový pracovný hárok“ CopySheet ”ActiveSheet.Name = "CopySheet"„Skopírujte údaje z pôvodného pracovného hárkaHárky („DataInRows“). UsedRange.Copy'Aktivujte nový hárok, ktorý bol vytvorenýTabuľky („CopySheet“). Aktivujte„Prilepením transponujte údaje tak, aby boli teraz v stĺpcochActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Prevádzka: = xlNone, SkipBlanks: = _Falošné, transponovať: = Pravda„Odstráňte duplikáty pre stĺpce 1 a 3ActiveSheet.UsedRange.RemoveDuplicates stĺpce: = Array (1, 3), Header _: = xlÁno„Vymažte údaje v pôvodnom pracovnom hárkuHárky („DataInRows“). UsedRange.ClearContents'Skopírujte stĺpce údajov z nového vytvoreného pracovného hárkaHárky („kópia“). UsedRange.Copy'Aktivujte pôvodný listTabuľky („DataInRows“). Aktivujte„Prilepením transponujete neduplicitné údajeActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Prevádzka: = xlNone, SkipBlanks: = _Falošné, transponovať: = Pravda'Odstráňte hárok kópie - už nie je potrebnýHárky („Copysheet“). Odstrániť'Aktivujte pôvodný listTabuľky („DataInRows“). Aktivujte'Znova zapnite aktualizáciu obrazovky a upozorneniaApplication.ScreenUpdating = TrueApplication.DisplayAlerts = PravdaKoniec pod

Tento kód predpokladá, že pôvodné údaje v riadkoch sú uložené v pracovnom hárku s názvom „DataInRows“

Po spustení kódu bude váš pracovný hárok vyzerať takto:

Duplikát „Jablká“ v stĺpci E bol teraz odstránený. Užívateľ je späť v čistej polohe, bez vonkajších hárkov a celý proces bol vykonaný hladko bez blikania obrazovky alebo výstražných správ.

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave