Премахване на дублирани стойности в Excel VBA

Този урок ще покаже как да премахнете дубликати, като използвате метода RemoveDuplicates във VBA.

Метод RemoveDuplicates

Когато данните се импортират или поставят в работен лист на Excel, те често могат да съдържат дублирани стойности. Може да се наложи да почистите входящите данни и да премахнете дубликати.

За щастие има лесен метод в обекта Range на VBA, който ви позволява да направите това.

1 Диапазон („A1: C8“). RemoveDuplicates Колони: = 1, Заглавка: = xl Да

Синтаксисът е:

RemoveDuplicates ([Колони], [Заглавка]

  • [Колони] - Посочете кои колони се проверяват за дублиращи се стойности. Всички колони много съвпадат, за да се считат за дубликат.
  • [Заглавка] - Данните имат ли заглавка? xlNo (по подразбиране), xlYes, xlYesNoGuess

Технически двата параметъра не са задължителни. Ако обаче не посочите аргумента Columns, дубликатите няма да бъдат премахнати.

Стойността по подразбиране за заглавката е xlNo. Разбира се, по -добре е да посочите този аргумент, но ако имате ред на заглавка, е малко вероятно редът на заглавката да съвпада като дубликат.

RemoveDuplicates Указания за употреба

  • Преди да използвате метода RemoveDuplicates, трябва да посочите диапазон, който да се използва.
  • Методът RemoveDuplicates ще премахне всички редове с намерени дубликати, но ще запази първоначалния ред с всички стойности.
  • Методът RemoveDuplicates работи само върху колони, но не и върху редове, но кодът VBA може да бъде написан за коригиране на тази ситуация (вижте по -късно).

Примерни данни за примери за VBA

За да се покаже как работи примерният код, се използват следните примерни данни:

Премахнете дублиращите се редове

Този код ще премахне всички дублирани редове въз основа само на стойности в колона А:

123 Sub RemoveDupsEx1 ()Диапазон („A1: C8“). RemoveDuplicates Колони: = 1, Заглавка: = xl ДаEnd Sub

Забележете, че изрично дефинирахме диапазона „A1: C8“. Вместо това можете да използвате UsedRange. UsedRange ще определи последния използван ред и колона от вашите данни и ще приложи RemoveDuplicates към целия този диапазон:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Колони: = 1, Заглавка: = xl ДаEnd Sub

UsedRange е изключително полезен, премахвайки необходимостта от изрично дефиниране на обхвата.

След като стартирате този код, вашият работен лист ще изглежда така:

Обърнете внимание, че тъй като е посочена само колона А (колона 1), дубликатът „Ябълки“, по -рано в ред 5, е премахнат. Количеството (колона 2) обаче е различно.

За да премахнем дубликати, сравнявайки множество колони, можем да ги посочим, използвайки метод Array.

Премахване на дубликати, сравняващи множество колони

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Колони: = Array (1, 2), Header: = xlДаEnd Sub

Масивът казва на VBA да сравнява данните, използвайки двете колони 1 и 2 (A и B).

Колоните в масива не трябва да са в последователен ред.

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Колони: = Array (3, 1), Header: = xl ДаEnd Sub

В този пример колони 1 и 3 се използват за дублиращото сравнение.

Този пример за код използва и трите колони за проверка за дубликати:

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Колони: = Array (1, 2, 3), Header: = xl ДаEnd Sub

Премахване на дублирани редове от таблица

RemoveDuplicates може също да се приложи към таблица на Excel по абсолютно същия начин. Синтаксисът обаче е малко по -различен.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Таблица1"). DataBodyRange.RemoveDuplicates Колони: = Array (1, 3), _Заглавие: = xlДаEnd Sub

Това ще премахне дубликатите в таблицата въз основа на колони 1 и 3 (A и C). Това обаче не подрежда цветното форматиране на таблицата и ще видите цветни празни редове, оставени в долната част на таблицата.

Премахване на дубликати от масиви

Ако трябва да премахнете дублирани стойности от масив, разбира се, можете да изведете вашия масив в Excel, да използвате метода RemoveDuplicates и да импортирате отново масива.

Въпреки това, ние също написахме процедура за VBA за премахване на дубликати от масив.

Премахване на дубликати от редове данни с помощта на VBA

Методът RemoveDuplicates работи само върху колони с данни, но с някакво мислене „извън кутията“ можете да създадете VBA процедура за справяне с редове с данни.

Да предположим, че вашите данни изглеждат така в работния ви лист:

Имате същите дубликати като преди в колони B и E, но не можете да ги премахнете с помощта на метода RemoveDuplicates.

Отговорът е да използвате VBA, за да създадете допълнителен работен лист, да копирате данните в него, като ги транспонирате в колони, да премахнете дубликатите и след това да ги копирате обратно, като ги транспонирате обратно в редове.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()„Изключете актуализирането на екрана и сигналите - искаме кодът да работи гладко, без потребителят да вижда'какво ставаApplication.ScreenUpdating = FalseApplication.DisplayAlerts = False„Добавяне на нов работен листЛистове. Добавяне след: = ActiveSheet„Обадете се на новия работен лист„ CopySheet “ActiveSheet.Name = "CopySheet"„Копирайте данните от оригиналния работен листЛистове ("DataInRows"). UsedRange.Copy„Активирайте новия лист, който е създаденЛистове ("CopySheet"). Активирайте„Поставете транспониране на данните, така че те вече да са в колониActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Операция: = xlNone, SkipBlanks: = _Неверно, Транспониране: = Вярно„Премахнете дубликатите за колони 1 и 3ActiveSheet.UsedRange.RemoveDuplicates колони: = Array (1, 3), Header _: = xlДа„Изчистете данните в оригиналния работен листЛистове ("DataInRows"). UsedRange.ClearContents„Копирайте колоните с данни от новия създаден работен листЛистове ("Copysheet"). UsedRange.Copy'Активирайте оригиналния листТаблици („DataInRows“). Активирайте„Поставете транспониране на недублираните данниActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Операция: = xlNone, SkipBlanks: = _Неверно, Транспониране: = Вярно„Изтриване на листа за копиране - вече не е необходимоЛистове („Copysheet“). Изтриване'Активирайте оригиналния листТаблици („DataInRows“). Активирайте„Включете отново актуализирането на екрана и сигналитеApplication.ScreenUpdating = ВярноApplication.DisplayAlerts = ВярноEnd Sub

Този код предполага, че първоначалните данни в редове се съхраняват на работен лист, наречен „DataInRows“

След като стартирате кода, вашият работен лист ще изглежда така:

Дубликатът „Ябълки“ в колона Е вече е премахнат. Потребителят се завръща в чисто положение, без никакви външни работни листове, а целият процес е извършен гладко, без трептене на екрана или предупредителни съобщения.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave