Добрый день. Помогите пожалуйста. Есть таблица, в ней столбцы в диапазоне А:АА, количество столбцов всегда одинаковое, количество строк может различаться. Как сделать макрос чтобы удалял повторяющие строки? Совпадение должно быть по всем столбцам.
Добрый день. Помогите пожалуйста. Есть таблица, в ней столбцы в диапазоне А:АА, количество столбцов всегда одинаковое, количество строк может различаться. Как сделать макрос чтобы удалял повторяющие строки? Совпадение должно быть по всем столбцам.cresh12
Sub Мяу() Dim arr, arr1 arr1 = Range("A1").CurrentRegion.Value Dim lr&, col&, i&, j& col = Cells(1, Columns.Count).End(xlToLeft).Column lr = Cells(Rows.Count, 1).End(xlUp).Row ReDim arr(1 To lr) With CreateObject("Scripting.Dictionary") For i = 2 To lr For j = 1 To col arr(i) = arr(i) & arr1(i, j) & "|" Next If .exists(arr(i)) Then .Item(arr(i)) = 1 Else .Item(arr(i)) = 0 End If Next Application.ScreenUpdating = False For i = lr To 2 Step -1 If .Item(arr(i)) = 1 Then Rows(i).Delete Next End With End Sub
[/vba]
[vba]
Код
Sub Мяу() Dim arr, arr1 arr1 = Range("A1").CurrentRegion.Value Dim lr&, col&, i&, j& col = Cells(1, Columns.Count).End(xlToLeft).Column lr = Cells(Rows.Count, 1).End(xlUp).Row ReDim arr(1 To lr) With CreateObject("Scripting.Dictionary") For i = 2 To lr For j = 1 To col arr(i) = arr(i) & arr1(i, j) & "|" Next If .exists(arr(i)) Then .Item(arr(i)) = 1 Else .Item(arr(i)) = 0 End If Next Application.ScreenUpdating = False For i = lr To 2 Step -1 If .Item(arr(i)) = 1 Then Rows(i).Delete Next End With End Sub
Два дельных ответа и никакой реакции автора... странно. RAN, скажите пожалуйста, как правильно доработать Ваш макрос, чтобы он учитывал только дубликаты в столбце "Д". У меня честно говоря не получается корректно исправить (удаляет все строки, хотя по циклу вниз идёт красиво, а на обратном пути удаляет всё). И, если не сложно, скажите, как у него быстродействие по сравнению с другими вариантами перебора строк. Если я правильно понимаю, то это очень "быстрый" способ.
Два дельных ответа и никакой реакции автора... странно. RAN, скажите пожалуйста, как правильно доработать Ваш макрос, чтобы он учитывал только дубликаты в столбце "Д". У меня честно говоря не получается корректно исправить (удаляет все строки, хотя по циклу вниз идёт красиво, а на обратном пути удаляет всё). И, если не сложно, скажите, как у него быстродействие по сравнению с другими вариантами перебора строк. Если я правильно понимаю, то это очень "быстрый" способ.emkub
Сообщение отредактировал emkub - Среда, 13.04.2016, 10:08
Первый вариант - не вариант. Нужно удалять оба (или больше) повторяющихся значения, а "удаление дубликатов" оставит по одному экземпляру каждого повторяющегося значения. И конечно я искал не только по форуму, но и сейчас ищу везде. Конкретно под мою задачу тут не увидел ничего... На счёт скорости - имел ввиду создание [vba]
Код
CreateObject("Scripting.Dictionary")
[/vba] по сравнению с моментальным удалением совпадения (просто непонятно описал сразу). [moder]Ну тогда создавайте свою тему с примером. Эту закрываю.[/moder]
Первый вариант - не вариант. Нужно удалять оба (или больше) повторяющихся значения, а "удаление дубликатов" оставит по одному экземпляру каждого повторяющегося значения. И конечно я искал не только по форуму, но и сейчас ищу везде. Конкретно под мою задачу тут не увидел ничего... На счёт скорости - имел ввиду создание [vba]
Код
CreateObject("Scripting.Dictionary")
[/vba] по сравнению с моментальным удалением совпадения (просто непонятно описал сразу). [moder]Ну тогда создавайте свою тему с примером. Эту закрываю.[/moder]emkub
Сообщение отредактировал Manyasha - Среда, 13.04.2016, 13:39