Odebrání duplicitních hodnot v aplikaci Excel VBA

Tento tutoriál předvede, jak odebrat duplikáty pomocí metody RemoveDuplicates ve VBA.

Metoda RemoveDuplicates

Když jsou data importována nebo vložena do listu aplikace Excel, často mohou obsahovat duplicitní hodnoty. Možná budete muset příchozí data vyčistit a odstranit duplikáty.

Naštěstí v objektu Range VBA existuje snadná metoda, která vám to umožňuje.

1 Rozsah („A1: C8“). Odstranit duplikáty Sloupce: = 1, Záhlaví: = xlAno

Syntaxe je:

RemoveDuplicates ([Sloupce], [Záhlaví]

  • [Sloupce] - Určete, ve kterých sloupcích se kontrolují duplicitní hodnoty. Všechny sloupce se hodně shodují, aby byly považovány za duplikáty.
  • [Záhlaví] - Mají data záhlaví? xlNo (výchozí), xlYes, xlYesNoGuess

Technicky jsou oba parametry volitelné. Pokud však nezadáte argument Sloupce, nebudou odstraněny žádné duplikáty.

Výchozí hodnota pro záhlaví je xlNo. Tento argument je samozřejmě lepší specifikovat, ale pokud máte řádek záhlaví, je nepravděpodobné, že se řádek záhlaví bude shodovat jako duplikát.

RemoveDuplicates Usage Notes

  • Před použitím metody RemoveDuplicates musíte určit rozsah, který se má použít.
  • Metoda RemoveDuplicates odstraní všechny řádky s nalezenými duplikáty, ale zachová původní řádek se všemi hodnotami.
  • Metoda RemoveDuplicates funguje pouze na sloupcích a ne na řádcích, ale k nápravě této situace lze napsat kód VBA (viz později).

Ukázková data pro příklady VBA

Aby bylo možné ukázat, jak funguje ukázkový kód, používají se následující ukázková data:

Odstraňte duplicitní řádky

Tento kód odstraní všechny duplicitní řádky pouze na základě hodnot ve sloupci A:

123 Dílčí RemoveDupsEx1 ()Rozsah („A1: C8“). Odstranit duplikáty Sloupce: = 1, Záhlaví: = xlAnoEnd Sub

Všimněte si, že jsme výslovně definovali rozsah „A1: C8“. Místo toho můžete použít UsedRange. UsedRange určí poslední použitý řádek a sloupec vašich dat a použije RemoveDuplicates na celý tento rozsah:

123 Dílčí RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Sloupce: = 1, Záhlaví: = xlAnoEnd Sub

UsedRange je neuvěřitelně užitečný a odstraňuje potřebu explicitně definovat rozsah.

Po spuštění těchto kódů bude váš list nyní vypadat takto:

Všimněte si, že protože byl zadán pouze sloupec A (sloupec 1), duplikát „Jablka“ dříve v řádku 5 byl odstraněn. Množství (sloupec 2) je však jiné.

Chcete -li odstranit duplikáty a porovnat více sloupců, můžeme tyto sloupce určit pomocí metody Array.

Odeberte duplikáty porovnáním více sloupců

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

Pole řekne VBA, aby porovnala data pomocí obou sloupců 1 a 2 (A a B).

Sloupce v poli nemusí být v po sobě jdoucím pořadí.

123 Dílčí jednoduchý příklad ()ActiveSheet.UsedRange.RemoveDuplicates Sloupce: = Array (3, 1), Header: = xlYesEnd Sub

V tomto případě se pro duplicitní srovnání používají sloupce 1 a 3.

Tento příklad kódu používá ke kontrole duplicit všechny tři sloupce:

123 Dílčí jednoduchý příklad ()ActiveSheet.UsedRange.RemoveDuplicates Sloupce: = Array (1, 2, 3), Header: = xlYesEnd Sub

Odebrání duplicitních řádků z tabulky

Odebrat duplikáty lze také použít na tabulku aplikace Excel přesně stejným způsobem. Syntaxe se však mírně liší.

1234 Dílčí jednoduchý příklad ()ActiveSheet.ListObjects ("Tabulka1"). DataBodyRange.RemoveDuplicates Sloupce: = Array (1, 3), _Záhlaví: = xlAnoEnd Sub

Tím odstraníte duplikáty v tabulce na základě sloupců 1 a 3 (A a C). Nedojde však k uklizení barevného formátování tabulky a ve spodní části tabulky uvidíte barevné prázdné řádky.

Odeberte duplikáty z polí

Pokud potřebujete odebrat duplicitní hodnoty z pole, samozřejmě můžete pole odeslat do aplikace Excel, použít metodu RemoveDuplicates a pole znovu importovat.

Napsali jsme však také proceduru VBA k odstranění duplikátů z pole.

Odebírání duplicit z řádků dat pomocí VBA

Metoda RemoveDuplicates funguje pouze na sloupcích dat, ale s určitým myšlením „po vybalení z krabice“ můžete vytvořit proceduru VBA, která se bude zabývat řadami dat.

Předpokládejme, že vaše data vypadají na listu takto:

Ve sloupcích B a E máte stejné duplikáty jako dříve, ale nemůžete je odebrat pomocí metody RemoveDuplicates.

Odpovědí je použít VBA k vytvoření dalšího listu, zkopírovat do něj data, transponovat je do sloupců, odstranit duplikáty a poté je zkopírovat zpět a transponovat zpět do řádků.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()'Vypněte aktualizaci obrazovky a upozornění - chceme, aby kód běžel hladce, aniž by to uživatel viděl.''co se dějeApplication.ScreenUpdating = FalseApplication.DisplayAlerts = False"Přidejte nový list."Sheets.Add After: = ActiveSheet'Zavolejte nový list' CopySheet 'ActiveSheet.Name = "CopySheet"'Zkopírujte data z původního listuListy („DataInRows“). UsedRange.Copy'Aktivujte nový list, který byl vytvořenListy („CopySheet“). Aktivujte'Vložit transponujte data tak, aby byla nyní ve sloupcíchActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, operace: = xlNone, SkipBlanks: = _False, Transpose: = True`` Odstraňte duplikáty sloupců 1 a 3ActiveSheet.UsedRange.RemoveDuplicates Sloupce: = Array (1, 3), Header _: = xlAno„Vymažte data v původním listuListy („DataInRows“). UsedRange.ClearContents'Zkopírujte sloupce dat z nového vytvořeného listuListy („Copysheet“). UsedRange.Copy„Aktivujte původní listListy („DataInRows“). Aktivujte'Vložit transponujte neduplicitní dataActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, operace: = xlNone, SkipBlanks: = _False, Transpose: = True'Smažte kopírovací list - již není potřebaListy („Copysheet“). Smazat„Aktivujte původní listListy („DataInRows“). Aktivujte'Znovu zapněte aktualizaci obrazovky a upozorněníApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd Sub

Tento kód předpokládá, že původní data v řádcích jsou uložena na listu s názvem „DataInRows“

Po spuštění kódu bude váš list vypadat takto:

Duplikát „Jablka“ ve sloupci E byl nyní odstraněn. Uživatel je zpět v čisté poloze, bez jakýchkoli cizích pracovních listů a celý proces byl proveden hladce bez blikání obrazovky nebo varovných zpráv.

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave