Страницы: 1
RSS
Удаление дубликатов с условием
 
Добрый день!
Прошу помочь в следующей задачке. Необходимо удалить дубликаты, вернее необходимо удалить обе строчки, если они задваиваются, но с условием, что в одной из строчек есть фраза неявка. Пример того что есть, и того что должно быть во вложении.
Буду благодарен за помощь.
 
А почему сразу в теме не оговариваете условие, что "Необходимо, что бы макрос..." - это в файле?!!
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Прошу прощения :)
Необходимо, что бы макрос, провел проверку на всем листе и удалил задвоенных сотрудников - дубликаты (по столбцу A:H, но, что бы в строчке I, у одного из дубликатов стояла неявка. т.е. нужно удалить строчки 2 и 7, 3 и 8, 4 и 9 и т.д. Оставить строчки 12 и 13.) Номера групп могут быть совершенно любыми (не стоит привязываться к красивым числам :))
 
см.ПРИЕМЫ - выбор уникальных значений + добавить к выборке проверку по столбцу I
 
Спасибо за вектор, попробую сделать
 
Файл к которому необходимо сделать выборку - порядка 100 тыс строк, и столбцы от A до J
Решил не заморачиваться над неявкой, и просто удалить идентичные строки. Для этого, в столбце K использовал формулу СЦЕПИТЬ, а в столбце L формулу =ЕСЛИ(СЧЁТЕСЛИ(B$1:B2;B2)=1;МАКС(A$1:A1)+1;"")
Но, т.к. данных много - Ексель уходит в аут.
Могли бы что нибудь порекомендовать?
 
Поручить эту работу макросу. Подобные темы уже были.
 
Некогда всё продумывать и делать (да и не интересно), но думаю чтоб сэкономить память, я бы сперва создал два словаря, чтоб создать номера/ID для "Должность" и "Тренинг", а может заодно и для "ГОСБ", если там адреса часто повторяются.
Тогда строку
фамилия имя отчество|06.01.1989|очень длинная должность|очень длинное название|название местоположения|1234567890|2.00|13-88-11111
можно сократить до
фамилия имя отчество|06.01.1989|3|4|5|1234567890|2.00|13-88-11111
что думаю должно сказаться на 100к строк.
По "неявка" детали не понял - какой там критерий отбора...
Изменено: Hugo - 01.10.2013 13:02:24
 
в общем, задача свелась к следующей:
Необходимо из всех данных необходимо оставить только уникальные строки, т.е. если строка повторяется, то нужно удалить не только дубликаты, но и саму строку. Сложность в том, что всего около 100к строк  и порядка 10 столбцов.
с айди вряд-ли получится, очень часто делается выгрузка, и из этих данных формируется сводная таблица.
 
Юрий, ищу, но не могу найти. Вопросов много подобных обсуждалось, но не могу найти про макросы, рабочие.
 
Странно, что Вам попадаются только нерабочие макросы))
 
Юрий, дело не в работе самих макросов, а в том, что они не совсем подходят к моему варианту. Макросы которые я видел, либо переносят уникальные (сходно с функцией удалить дубликаты) значения на новый лист. Либо работают с одной колонкой. и очень много ссылок на приемы, где подробно рассказывают, как удалить дубликаты, без исходной строки.
Изменено: nikguard - 01.10.2013 15:23:18
 
Игорь (Hugo) неоднократно показывал варианты для нескольких столбцов. Вкратце суть такова: заносятся в массив сцепленные данные из нужных столбцов, и там уже сравниваются.
 
Вот как раз нужен тот, который "переносит" на новый лист, но на массиве.
Набрали массив, удалили всё в исходном листе, выгрузили собранное. Если уж так совсем не подходит новая книга с результатом.
Хотя конечно то, что нужны только те строки, которые не повторяются - усложняет алгоритм. Придётся все 100к перебирать по два раза...
Но делал - собираем в словарь ключ с номером строки. Если повтор ключа - номер строки обнуляем.
Чтоб сэкономить память - в конце пробегаемся по ключам и считаем количество оставшихся строк, создаём именно такой массив.
Затем ещё раз пробегаемся по ключам и уже копируем нужные строки.
А про ID вы не поняли - создаём с помощью 3-х других словарей свои ID для этих значений.
Но если памяти хватит для работы и без этого выверта - то и ладно. Не хватит - можно пробовать так подсократить её расход.
 
Игорь, спасибо за разъяснения. Написал Вам в ЛС, жду ответа. Спасибо.
Страницы: 1
Читают тему
Наверх