Удаление повторяющихся значений (дубликатов) в диапазоне ячеек с помощью кода VBA Excel. Метод Range.RemoveDuplicates — синтаксис, параметры, примеры.
Метод Range.RemoveDuplicates
Метод Range.RemoveDuplicates предназначен в VBA Excel для удаления повторяющихся значений по столбцам в заданном диапазоне ячеек рабочего листа. Строки с обнаруженными дубликатами удаляются целиком.
Синтаксис метода Range.RemoveDuplicates
expression. RemoveDuplicates (Columns , Header)
,
где expression — переменная или выражение, возвращающее объект Range.
Параметры метода Range.RemoveDuplicates
Наименование | Описание |
---|---|
Columns | Массив индексов столбцов, содержащих ячейки с повторяющимися значениями. Обязательный параметр. Тип данных – Variant. |
Header | Указывает, содержит ли первая строка диапазона заголовок, который не участвует в поиске дубликатов:
Необязательный параметр. Тип данных – XlYesNoGuess. |
Метод работает как с круглыми скобками, в которые заключены параметры, так и без них. Если требуется указать несколько столбцов в параметре Columns, следует использовать функцию Array, например, Array(2, 3).
Примеры удаления дубликатов
Исходная таблица для всех примеров
По третьей колонке легко определить, какие строки были удалены.
Пример 1
Удаление повторяющихся значений по первому столбцу:
Range("A1:C10").RemoveDuplicates 1
или
Range(Cells(1, 1), Cells(10, 3)).RemoveDuplicates (1)
Второй вариант позволяет использовать вместо индексов строк и столбцов переменные. Наличие или отсутствие скобок, в которые заключен параметр Columns, на работу метода не влияет.
Результат:
Пример 2
Удаление дубликатов по первому столбцу с указанием, что первая строка содержит заголовок:
Range("A1:C10").RemoveDuplicates 1, xlYes
Результат:
Здесь мы видим, что первая строка не учитывалась при поиске повторяющихся значений.
Пример 3
Удаление дубликатов по первому и второму столбцам:
Range("A1:C10").RemoveDuplicates Array(1, 2)
Результат:
Обратите внимание, что при удалении повторяющихся значений по нескольким столбцам, будут удалены дубли только тех строк, в которых во всех указанных столбцах содержатся одинаковые значения. В третьем примере удалены «лишние» строки с дублями значений по двум первым столбцам: Корова+Лягушка, Свинья+Бурундук и Овца+Собака.
Смотрите, как отобрать уникальные значения из списка в VBA Excel с помощью объекта Collection и объекта Dictionary.
Добрый день, вчера весь день искал себе подходящий способ решения своей задачи, но так и не нашел подходящий.
Прошу Вас помочь мне.
В приложенном Excel файле 2 таблицы:
Левая — исходные данные
Правая — какой должен получиться результат
Задача — сразу в нескольких колонках, удалить все дубликаты находящиеся только в одном столбце.
То есть если в одном столбце дважды (или несколько раз) попадается цифра «4» — то именно в этом столбце должна остаться только одна цифра «4».
Например: У нас в одном столбце восемь цифр: 1 2 3 4 1 2 3 4
Мы видим, что здесь последние четыре цифры 1 2 3 4 — дублируются, то есть на выходе должны остаться только первые четыре цифры 1 2 3 4
Я нашел пару макросов, как удалить дубликаты во всех столбцах, а не только в одном — и это не подходит.
Например: У нас есть два столбца:
1….5
2….6
3….5
4….6
1….1
2….2
3….3
4….4
То есть, на выходе должно получиться:
1…..5
2…..6
3…..1
4…..2
…….3
…….4
То есть, в первом столбце были удалены дублирующиеся последние четыре цифры (1 2 3 4), а во втором столбце дублирующиеся вторая и третья цифры (5 6).
Вот тут важно то, что во втором столбце последние цифры 1 2 3 4 — не дубликаты потому, что во втором столбце нет повторяющихся цифр 1 2 3 4.
Во втором столбце дублируются лишь 5 и 6.
А мои макросы оказывается удаляют дубликаты не в отдельном одном столбце из всей массы столбцов, а во всех столбцах сразу — виртуально объединив их в один.
Где в результате из нашего примера получается следующее:
1….5
2….6
3
4
Хотя, мне не нужно было, чтобы макрос удалял во втором столбце последние четыре цифры 1 2 3 4.
Excel VBA code to remove duplicates from a given range of cells. In the below data set we have given a list of 15 numbers in “Column A” range A1:A15. Need to remove duplicates and place unique numbers in column B.
Sample Data: Cells A1:A15
Sample Data
Final Output:
VBA Code to remove duplicates and place into next column (B)
Declare Variables:
Variables | Data Type | Comments |
---|---|---|
nonDuplicate | Boolean | It is a Boolean value (True/False). |
uNo | Integer | Count no of Unique items in column B |
colA | Integer | Iteration column A cells |
colB | Integer | Iteration column B cells |
'Variable Declarations Dim nonDuplicate As Boolean, uNo As Integer, colA As Integer, colB As Integer
Always first value will be unique, So A1 place to cell B1
'Place first value to B1 Cells(1, 2).Value = Cells(1, 1).Value
Initialize variables:
'Initialize uNo = 1 since first number is already placed in column B; Assign True to the variable nonDuplicate uNo = 1 nonDuplicate= True
Since the first number is already placed in cell B1, Loop starts from A2 to A15. Take each number from Column A and check with Column B (unique range)
'Use for loop to check each number from A2 to A15 For colA = 2 To 15 For colB = 1 To uNo
if the number is already placed in column B. Assign False to the “nonDuplicate” variable.
If Cells(colA, 1).Value = Cells(colB, 2).Value Then nonDuplicate= False End If
“nonDuplicate” is True then place to column B and increase uNo by 1
'if nonDuplicate is true, place cell value in column B and increase uNo = uNo + 1 If nonDuplicate = True Then Cells(uNo + 1, 2).Value = Cells(colA, 1).Value uNo = uNo + 1 End If
Reset “nonDuplicate” variable
'reset nonDuplicate to True nonDuplicate = True
Close for loop
Next colA
Implementation:
Follow the below steps to remove duplicates using Excel VBA:
Step 1: Add a shape (VBA Remove Duplicates) to your worksheet
Step 2: Right-click on “VBA Remove Duplicates” and “Assign Macro..”
Step 3: Select “removeDuplicates”, you can see a list of macros available in your workbook
Step 4: Save your excel file as “Excel Macro-Enabled Workbook” *.xlsm
Step 5: Click “VBA Remove Duplicates” to execute VBA code and see the output
Необходим макрос для удаления дубликатов |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
I have a worksheet with two columns: Date and Name. I want to delete all rows that are exact duplicates, leaving only unique values.
Here is my code (which doesn’t work):
Sub DeleteRows()
Dim rng As Range
Dim counter As Long, numRows As Long
With ActiveSheet
Set rng = ActiveSheet.Range("A1:B" & LastRowB)
End With
numRows = rng.Rows.Count
For counter = numRows To 1 Step -1
If rng.Cells(counter) Like rng.Cells(counter) - 1 Then
rng.Cells(counter).EntireRow.Delete
End If
Next
End Sub
It’s «Like rng.Cells(counter)-1» that seems to be the cause- I get «Type Mismatch».
asked Jun 7, 2013 at 16:25
4
There’s a RemoveDuplicates
method that you could use:
Sub DeleteRows()
With ActiveSheet
Set Rng = Range("A1", Range("B1").End(xlDown))
Rng.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End With
End Sub
answered Jun 7, 2013 at 16:40
fbonettifbonetti
6,5823 gold badges33 silver badges32 bronze badges
5
The duplicate values in any column can be deleted with a simple for loop.
Sub remove()
Dim a As Long
For a = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If WorksheetFunction.CountIf(Range("A1:A" & a), Cells(a, 1)) > 1 Then Rows(a).Delete
Next
End Sub
answered Nov 23, 2016 at 17:04
kadrleynkadrleyn
3341 silver badge5 bronze badges