Есть таблица Ексель, большая, более 100к строк и в каждой строке около 10 ячеек. Стоит задача избавиться от дублей в таблице Дублем считается, если в ячейке B любой строки повторяется один и тот же емаил, при этом другие ячейки, которые присутствуют на таких строчках могут отличаться. Как из этих дублирующихся по выбрать любую из строк, а остальные удалить. Нужно оставить любую из этих строк, но только одну
В прикрепленном фаиле еще раз пояснил задачу. Спасибо за помощь)
Есть таблица Ексель, большая, более 100к строк и в каждой строке около 10 ячеек. Стоит задача избавиться от дублей в таблице Дублем считается, если в ячейке B любой строки повторяется один и тот же емаил, при этом другие ячейки, которые присутствуют на таких строчках могут отличаться. Как из этих дублирующихся по выбрать любую из строк, а остальные удалить. Нужно оставить любую из этих строк, но только одну
В прикрепленном фаиле еще раз пояснил задачу. Спасибо за помощь)imagazina
imagazina, добрый вечер,попробуйте макрос,кнопка example,для повтора скопируйте данные с Лист2 на Лист1
[vba]
Код
Sub example() Dim z(), i& z = Range("A1:K" & Range("A" & Rows.Count).End(xlUp).Row).Value With CreateObject("scripting.dictionary"): .CompareMode = 1 For i = UBound(z) To 1 Step -1 .Item(z(i, 2)) = .Item(z(i, 2)) + 1 If .Item(z(i, 2)) > 1 Then Rows(i & ":" & i).Delete Next End With End Sub
[/vba]
imagazina, добрый вечер,попробуйте макрос,кнопка example,для повтора скопируйте данные с Лист2 на Лист1
[vba]
Код
Sub example() Dim z(), i& z = Range("A1:K" & Range("A" & Rows.Count).End(xlUp).Row).Value With CreateObject("scripting.dictionary"): .CompareMode = 1 For i = UBound(z) To 1 Step -1 .Item(z(i, 2)) = .Item(z(i, 2)) + 1 If .Item(z(i, 2)) > 1 Then Rows(i & ":" & i).Delete Next End With End Sub
Я бы сделал так (оставляет первое вхождение по столбцу В) [vba]
Код
Sub tt() Dim arr(), Dict As Object, i As Long, addr As String arr = Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row) Set Dict = CreateObject("Scripting.dictionary") With Dict .comparemode = 1 For i = 1 To UBound(arr) If .exists(arr(i, 1)) Then If addr = "" Then addr = "B" & i Else addr = addr & "," & "B" & i Else .Add Key:=arr(i, 1), Item:=0 End If Next Range(addr).EntireRow.Delete End With End Sub
[/vba]
Я бы сделал так (оставляет первое вхождение по столбцу В) [vba]
Код
Sub tt() Dim arr(), Dict As Object, i As Long, addr As String arr = Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row) Set Dict = CreateObject("Scripting.dictionary") With Dict .comparemode = 1 For i = 1 To UBound(arr) If .exists(arr(i, 1)) Then If addr = "" Then addr = "B" & i Else addr = addr & "," & "B" & i Else .Add Key:=arr(i, 1), Item:=0 End If Next Range(addr).EntireRow.Delete End With End Sub
можно удалить повторы расширенным фильтром (условие отбора в ячейке L2) Данные>Сортировка и фильтр>Дополнительно далее заполняем по скрину, жмем ОК
можно удалить повторы расширенным фильтром (условие отбора в ячейке L2) Данные>Сортировка и фильтр>Дополнительно далее заполняем по скрину, жмем ОК krosav4ig