Цей підручник покаже, як видалити дублікати за допомогою методу 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 видалено. Користувач повернувся у чистому положенні, без сторонніх робочих аркушів, а весь процес пройшов безперебійно, без мерехтіння екрана та попереджувальних повідомлень.