Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

RemoveDuplicates изнутри или как сделать аналог Удаления Дубликатов

Автор Тиль, 01.02.2012, 23:02

« назад - далее »

Тиль

Доброго времени суток.
В общем дали задание на работе, есть 2 таблицы, с одинаковыми столбцами.
Необходимо сверить эти таблицы и выдать список только уникальных строк из обоих таблиц.

Сначала сделал макрос на сверку позиций из 1-й  со 2-й с последующим, если нет совпадений, выводом в 3 таблицу. На тестировочных данных работало на ура, но когда затестил с реальными данными...произошел конфуз, такой метод вешает комп на неопределенное время из за ОГРОМНОГО кол-ва действий.
Посоветовали слить 2 таблицы в одну, отсортировать ее по возрастанию и грохнуть совпадашки, сделал, добился скорости примерно 1000 строк за 16 сек, вспомнил про "Удаление дубликатов"
   
Columns("A:I").Select
    ActiveSheet.Range("$A$1:$I$5").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9), Header:=xlNo

И вот собственно впорос, есть ли у кого алгоритм работы этого поиска, ибо скорость его поразительна, десятки тысяч строк проверяет за мгновение, но етсь одно но...мне нужно удалить полностью дублирующиеся данные...а этот метод оставляет 1 строку из всех дубликатов.
Или кто может знает как можно вручную узнать внутренний код ".RemoveDuplicates" ?

Спасибо заранее, если кто что посоветует.

exceleved

Вообще, подобные темы обсуждаются регулярно, например на этом сайте: https://forum.msexcel.ru/microsoft_excel/udalenie_identichnyh_strok_v_excel-t1977.0.html

Для быстрой обработки можно предложить 2 метода:
1. Создать доп. столбец с формулой, которая посчитает критерий: удалять/не удалять строку, потом _автофильтр_ по этому столбцу и удаление видимых строк.
2. Считать диапазон в массив и работать с массивом, используя методы VBA, в т.ч. коллекции и словари.

Приложите пример.

Тиль

Почитал, только если чесно не очень понял как...
Сделал кодом это...но все же терзает вопрос, как можно узнать метод работы .RemoveDuplicates.

kuklp

Да легко. Дизассемблировать Офис(весь), найти нужную библиотеку и узнать. Учите ассемблер:-)
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Тиль

Цитата: KuklP от 02.02.2012, 20:04
Да легко. Дизассемблировать Офис(весь), найти нужную библиотеку и узнать. Учите ассемблер:-)

;D Спасибо )

kuklp

Вам бы правила форума почитать, да выложить пример в файле. Глядишь и помогли бы.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771