Usuwanie zduplikowanych wartości w Excel VBA

Ten samouczek pokaże, jak usunąć duplikaty za pomocą metody RemoveDuplicates w VBA.

Metoda usuwania duplikatów

Gdy dane są importowane lub wklejane do arkusza programu Excel, często mogą zawierać zduplikowane wartości. Może być konieczne wyczyszczenie przychodzących danych i usunięcie duplikatów.

Na szczęście istnieje prosta metoda w obiekcie Range VBA, która pozwala to zrobić.

1 Zakres ("A1:C8").UsuńDuplikaty Kolumny:=1, Nagłówek:=xlTak

Składnia to:

UsuńDuplikaty([Kolumny],[Nagłówek]

  • [Kolumny] - Określ, które kolumny są sprawdzane pod kątem zduplikowanych wartości. Wszystkie kolumny w dużym stopniu pasują do duplikatu.
  • [Nagłówek] - Czy dane mają nagłówek? xlNie (domyślnie), xlTak, xlTakNieZgadnij

Technicznie oba parametry są opcjonalne. Jeśli jednak nie określisz argumentu Kolumny, żadne duplikaty nie zostaną usunięte.

Domyślna wartość nagłówka to xlNo. Oczywiście lepiej jest określić ten argument, ale jeśli masz wiersz nagłówka, jest mało prawdopodobne, że wiersz nagłówka zostanie dopasowany jako duplikat.

Usuń duplikaty Uwagi dotyczące użytkowania

  • Przed użyciem metody RemoveDuplicates należy określić zakres, który ma być używany.
  • Metoda RemoveDuplicates usunie wszystkie wiersze ze znalezionymi duplikatami, ale zachowa oryginalny wiersz ze wszystkimi wartościami.
  • Metoda RemoveDuplicates działa tylko na kolumnach, a nie na wierszach, ale można napisać kod VBA, aby naprawić tę sytuację (patrz dalej).

Przykładowe dane dla przykładów VBA

Aby pokazać, jak działa przykładowy kod, wykorzystywane są następujące przykładowe dane:

Usuń zduplikowane wiersze

Ten kod usunie wszystkie zduplikowane wiersze na podstawie tylko wartości w kolumnie A:

123 Sub UsuńDupsEx1()Zakres ("A1:C8").UsuńDuplikaty Kolumny:=1, Nagłówek:=xlTakNapis końcowy

Zauważ, że wyraźnie zdefiniowaliśmy zakres „A1:C8”. Zamiast tego możesz użyć UsedRange. UsedRange określi ostatnio używany wiersz i kolumnę danych i zastosuje RemoveDuplicates do tego całego zakresu:

123 Sub UsuńDups_UsedRange()ActiveSheet.UsedRange.RemoveDuplicates Kolumny:=1, Nagłówek:=xlTakNapis końcowy

UsedRange jest niezwykle przydatny, eliminując potrzebę jawnego definiowania zakresu.

Po uruchomieniu tego kodu Twój arkusz będzie teraz wyglądał tak:

Zauważ, że ponieważ określono tylko kolumnę A (kolumna 1), duplikat „Jabłka” poprzednio w wierszu 5 został usunięty. Jednak ilość (kolumna 2) jest inna.

Aby usunąć duplikaty, porównując wiele kolumn, możemy określić te kolumny za pomocą metody Array.

Usuń duplikaty porównując wiele kolumn

123 Sub UsuńDups_MultColumns()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2) , Header:=xlYesNapis końcowy

Array mówi VBA, aby porównał dane przy użyciu obu kolumn 1 i 2 (A i B).

Kolumny w tablicy nie muszą być ułożone w kolejności.

123 Pod prosty przykład()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(3, 1) , Header:=xlYesNapis końcowy

W tym przykładzie kolumny 1 i 3 są używane do porównania duplikatów.

Ten przykład kodu używa wszystkich trzech kolumn do sprawdzania duplikatów:

123 Pod prosty przykład()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3) , Header:=xlYesNapis końcowy

Usuwanie zduplikowanych wierszy z tabeli

RemoveDuplicates można również zastosować do tabeli programu Excel w dokładnie ten sam sposób. Jednak składnia jest nieco inna.

1234 Pod prosty przykład()ActiveSheet.ListObjects("Table1").DataBodyRange.RemoveDuplicates Columns:=Array(1, 3), _Nagłówek:=xlTakNapis końcowy

Spowoduje to usunięcie duplikatów w tabeli na podstawie kolumn 1 i 3 (A i C). Jednak nie porządkuje to formatowania kolorów w tabeli, a na dole tabeli pojawią się kolorowe puste wiersze.

Usuń duplikaty z tablic

Jeśli chcesz usunąć zduplikowane wartości z tablicy, oczywiście możesz wyprowadzić tablicę do programu Excel, użyć metody RemoveDuplicates i ponownie zaimportować tablicę.

Jednak napisaliśmy również procedurę VBA, aby usunąć duplikaty z tablicy.

Usuwanie duplikatów z wierszy danych za pomocą VBA

Metoda RemoveDuplicates działa tylko na kolumnach danych, ale przy odrobinie myślenia „po wyjęciu z pudełka” możesz utworzyć procedurę VBA do obsługi wierszy danych.

Załóżmy, że Twoje dane w arkuszu wyglądają tak:

Masz te same duplikaty co wcześniej w kolumnach B i E, ale nie możesz ich usunąć za pomocą metody RemoveDuplicates.

Odpowiedzią jest użycie VBA do utworzenia dodatkowego arkusza roboczego, skopiowania do niego danych transponujących je do kolumn, usunięcia duplikatów, a następnie skopiowania ich z powrotem, transponując je z powrotem do wierszy.

12345678910111213141516171819202122232425262728293031323334353637 Podduplikaty w rzędach()'Wyłącz aktualizacje ekranu i alerty - chcemy, aby kod działał płynnie, tak aby użytkownik nie widział'co się dziejeApplication.ScreenUpdating = FałszApplication.DisplayAlerts = False'Dodaj nowy arkuszArkusze.Dodaj po:=Aktywny arkusz'Wywołaj nowy arkusz 'Kopiuj arkusz'ActiveSheet.Name = "Kopiuj arkusz"'Skopiuj dane z oryginalnego arkuszaSheets("DataInRows").UsedRange.Copy'Aktywuj nowy arkusz, który został utworzonyArkusze("Kopiuj arkusz").Aktywuj„Wklej transponuj dane tak, aby były teraz w kolumnach”ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _Fałsz, transpozycja:=Prawda„Usuń duplikaty dla kolumn 1 i 3”ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 3), Header _:=xlTak„Wyczyść dane w oryginalnym arkuszu”Sheets("DataInRows").UsedRange.ClearContents'Skopiuj kolumny danych z nowo utworzonego arkuszaArkusze("Kopiuj").UsedRange.Copy'Aktywuj oryginalny arkuszArkusze("DataInRows").Aktywuj„Wklej transponuj niezduplikowane dane”ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _Fałsz, transpozycja:=Prawda„Usuń arkusz kopii - już nie jest potrzebny”Arkusze("Kopiuj").Usuń'Aktywuj oryginalny arkuszArkusze("DataInRows").Aktywuj'Włącz ponownie aktualizowanie ekranu i alertyApplication.ScreenUpdating = PrawdaApplication.DisplayAlerts = PrawdaNapis końcowy

Ten kod zakłada, że ​​oryginalne dane w wierszach są przechowywane w arkuszu o nazwie „DataInRows”

Po uruchomieniu kodu arkusz będzie wyglądał tak:

Duplikat „Jabłka” w kolumnie E został usunięty. Użytkownik jest z powrotem w czystej pozycji, bez wiszących wokół niego zbędnych arkuszy roboczych, a cały proces został wykonany płynnie, bez migotania ekranu lub komunikatów ostrzegawczych.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave