Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удаление повторяющихся строк - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление повторяющихся строк (Макросы/Sub)
Удаление повторяющихся строк
cresh12 Дата: Среда, 07.10.2015, 11:48 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 30
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день. Помогите пожалуйста. Есть таблица, в ней столбцы в диапазоне А:АА, количество столбцов всегда одинаковое, количество строк может различаться. Как сделать макрос чтобы удалял повторяющие строки? Совпадение должно быть по всем столбцам.
К сообщению приложен файл: maket17_ms21.xlsx (45.9 Kb)


Сообщение отредактировал cresh12 - Среда, 07.10.2015, 11:48
 
Ответить
СообщениеДобрый день. Помогите пожалуйста. Есть таблица, в ней столбцы в диапазоне А:АА, количество столбцов всегда одинаковое, количество строк может различаться. Как сделать макрос чтобы удалял повторяющие строки? Совпадение должно быть по всем столбцам.

Автор - cresh12
Дата добавления - 07.10.2015 в 11:48
Pelena Дата: Среда, 07.10.2015, 11:56 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19192
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Данные -- Удалить дубликаты не вариант?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Данные -- Удалить дубликаты не вариант?

Автор - Pelena
Дата добавления - 07.10.2015 в 11:56
RAN Дата: Среда, 07.10.2015, 12:56 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[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
[/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
[/vba]

Автор - RAN
Дата добавления - 07.10.2015 в 12:56
emkub Дата: Среда, 13.04.2016, 10:05 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Два дельных ответа и никакой реакции автора... странно.
RAN, скажите пожалуйста, как правильно доработать Ваш макрос, чтобы он учитывал только дубликаты в столбце "Д". У меня честно говоря не получается корректно исправить (удаляет все строки, хотя по циклу вниз идёт красиво, а на обратном пути удаляет всё).
И, если не сложно, скажите, как у него быстродействие по сравнению с другими вариантами перебора строк. Если я правильно понимаю, то это очень "быстрый" способ.


Сообщение отредактировал emkub - Среда, 13.04.2016, 10:08
 
Ответить
СообщениеДва дельных ответа и никакой реакции автора... странно.
RAN, скажите пожалуйста, как правильно доработать Ваш макрос, чтобы он учитывал только дубликаты в столбце "Д". У меня честно говоря не получается корректно исправить (удаляет все строки, хотя по циклу вниз идёт красиво, а на обратном пути удаляет всё).
И, если не сложно, скажите, как у него быстродействие по сравнению с другими вариантами перебора строк. Если я правильно понимаю, то это очень "быстрый" способ.

Автор - emkub
Дата добавления - 13.04.2016 в 10:05
SLAVICK Дата: Среда, 13.04.2016, 12:26 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Два дельных ответа

А Вы оба варианта попробовали?
Чем вариант Pelena, не подошел? Нужно всего лишь оставить галку на столбце "D".
А еще можно поискать
по сравнению с другими вариантами перебора строк

с какими другими? Вы их показали?
Если я правильно понимаю, то это очень "быстрый" способ

Удаление построчно - всегда долгое занятие на больших диапазонах.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Два дельных ответа

А Вы оба варианта попробовали?
Чем вариант Pelena, не подошел? Нужно всего лишь оставить галку на столбце "D".
А еще можно поискать
по сравнению с другими вариантами перебора строк

с какими другими? Вы их показали?
Если я правильно понимаю, то это очень "быстрый" способ

Удаление построчно - всегда долгое занятие на больших диапазонах.

Автор - SLAVICK
Дата добавления - 13.04.2016 в 12:26
emkub Дата: Среда, 13.04.2016, 13:31 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Первый вариант - не вариант. Нужно удалять оба (или больше) повторяющихся значения, а "удаление дубликатов" оставит по одному экземпляру каждого повторяющегося значения.
И конечно я искал не только по форуму, но и сейчас ищу везде. Конкретно под мою задачу тут не увидел ничего...
На счёт скорости - имел ввиду создание [vba]
Код
CreateObject("Scripting.Dictionary")
[/vba] по сравнению с моментальным удалением совпадения (просто непонятно описал сразу).
[moder]Ну тогда создавайте свою тему с примером.
Эту закрываю.[/moder]


Сообщение отредактировал Manyasha - Среда, 13.04.2016, 13:39
 
Ответить
СообщениеПервый вариант - не вариант. Нужно удалять оба (или больше) повторяющихся значения, а "удаление дубликатов" оставит по одному экземпляру каждого повторяющегося значения.
И конечно я искал не только по форуму, но и сейчас ищу везде. Конкретно под мою задачу тут не увидел ничего...
На счёт скорости - имел ввиду создание [vba]
Код
CreateObject("Scripting.Dictionary")
[/vba] по сравнению с моментальным удалением совпадения (просто непонятно описал сразу).
[moder]Ну тогда создавайте свою тему с примером.
Эту закрываю.[/moder]

Автор - emkub
Дата добавления - 13.04.2016 в 13:31
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление повторяющихся строк (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!