Видалення повторюваних значень у Excel VBA

Цей підручник покаже, як видалити дублікати за допомогою методу RemoveDuplicates у VBA.

Метод RemoveDuplicates

Коли дані імпортуються або вставляються на аркуш Excel, вони часто можуть містити повторювані значення. Можливо, вам доведеться очистити вхідні дані та видалити дублікати.

На щастя, у об’єкті Range VBA є простий метод, який дозволяє це зробити.

1 Діапазон (“A1: C8”). RemoveDuplicates Стовпці: = 1, Заголовок: = xlТак

Синтаксис такий:

RemoveDuplicates ([Стовпці], [Заголовок]

  • [Стовпці] - Вкажіть, у яких стовпцях перевіряються повторювані значення. Усі стовпці багато в чому збігаються, щоб вважати їх дублікатами.
  • [Заголовок] - У даних є заголовок? xlNo (за замовчуванням), xlYes, xlYesNoGuess

Технічно обидва параметри є необов’язковими. Однак, якщо не вказати аргумент Стовпці, жодні дублікати не будуть видалені.

Значення за замовчуванням для заголовка - 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 Стовпці: = Масив (1, 2), Заголовок: = xlТакEnd Sub

Масив повідомляє VBA порівняти дані, використовуючи обидва стовпці 1 і 2 (A і B).

Стовпці в масиві не обов'язково повинні бути в послідовному порядку.

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Стовпці: = Масив (3, 1), Заголовок: = xlТакEnd Sub

У цьому прикладі стовпці 1 і 3 використовуються для порівняння дублікатів.

У цьому прикладі коду всі три стовпці перевіряються на наявність дублікатів:

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Стовпці: = Масив (1, 2, 3), Заголовок: = xlТакEnd Sub

Видалення повторюваних рядків зі столу

RemoveDuplicates також можна застосувати до таблиці Excel точно так само. Однак синтаксис дещо інший.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Таблиця1"). DataBodyRange.RemoveDuplicates Стовпці: = Масив (1, 3), _Заголовок: = xlТакEnd Sub

Це видалить дублікати в таблиці на основі стовпців 1 і 3 (А та С). Однак це не наводить порядок у колірному форматуванні таблиці, і ви побачите кольорові порожні рядки, залишені внизу таблиці.

Видалити дублікати з масивів

Якщо вам потрібно видалити повторювані значення з масиву, звичайно, ви можете вивести ваш масив у Excel, скористатися методом RemoveDuplicates та повторно імпортувати масив.

Однак ми також написали процедуру VBA для видалення дублікатів з масиву.

Видалення дублікатів із рядків даних за допомогою VBA

Метод RemoveDuplicates працює лише зі стовпцями даних, але з деяким «нестандартним» мисленням ви можете створити процедуру VBA для роботи з рядками даних.

Припустимо, що ваші дані виглядають так на вашому аркуші:

У вас є ті ж дублікати, що і раніше у стовпцях B і E, але ви не можете видалити їх за допомогою методу RemoveDuplicates.

Відповідь полягає у використанні VBA для створення додаткового робочого аркуша, копіювання даних у нього, транспонування їх у стовпці, видалення дублікатів, а потім копіювання назад, транспонування їх назад у рядки.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()"Вимкніть оновлення екрана та сповіщення - ми хочемо, щоб код працював безперебійно, не бачачи користувача'що відбуваєтьсяApplication.ScreenUpdating = НеправдаApplication.DisplayAlerts = Неправда'Додати новий аркушТаблиці. Додати після: = ActiveSheet'Викличте новий аркуш' CopySheet 'ActiveSheet.Name = "Копіювати аркуш"'Скопіюйте дані з оригінального аркушаАркуші ("DataInRows"). UsedRange.Copy'Активуйте новий аркуш, який був створенийАркуші ("CopySheet"). Активуйте'Вставити транспонувати дані так, щоб вони тепер були у стовпцяхActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Операція: = xlNone, SkipBlanks: = _Неправда, Транспонування: = Істина'Видаліть дублікати стовпців 1 і 3ActiveSheet.UsedRange.RemoveDuplicates Стовпці: = Масив (1, 3), Заголовок _: = 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"

Після запуску коду ваш аркуш буде виглядати так:

Дублікат "Яблука" у стовпці E видалено. Користувач повернувся у чистому положенні, без сторонніх робочих аркушів, а весь процес пройшов безперебійно, без мерехтіння екрана та попереджувальних повідомлень.

Ви допоможете розвитку сайту, поділившись сторінкою з друзями

wave wave wave wave wave