|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.02.2013, 15:20 | #1 |
Форумчанин
Регистрация: 21.10.2011
Сообщений: 433
|
Сравнение диапазонов с пометкой совпадений
Добрый день, уважаемые форумчане!
Тема вроде известная и понятная. Нужен Ваш совет и подсказка. Ситуация касается сравнения диапазона ячеек строки с аналогичным диапазоном таких строк и при совпадении пометить шрифт другим цветом. Решение есть, но на сегодняшний момент при большем объеме строк, с которыми идет сравнение занимает много времени. Попытался загнать в массивы и сравнивать их элементы: Код:
Заранее спасибо! |
05.02.2013, 15:32 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Цикл в цикле долго.
Конечно на массивах на порядок быстрее, чем на диапазонах, но всё равно в данном случае нерационально. Делайте так - сперва одним проходом один массив в словарь, затем одним проходом по второму массиву по словарю получаете результат. Т.е. проверяете есть/нет значение в словаре. Ищите примеры scripting.dictionary - их тут много было. Ну а покраска - это уже отдельная песня. Можно сразу красить на листе, что долго. Можно ставить метки в третий массив, его выгружать на лист, затем с помощью всяких specialcells/columndifferences определять нужные диапазоны и красить сразу всю кучу... Делать лень. В принципе Я бы не красил, а забивал в свободный столбец через массив например "IIIIIIIII" - и быстро, и почти как покрашено, и сортировать можно хоть в XL2000 P.S. Хотя на 2000 строк можно и сразу на листе красить - тормоз не заметите
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 05.02.2013 в 15:37. |
05.02.2013, 16:13 | #3 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 616
|
если покрасить, то так
Код:
|
05.02.2013, 17:07 | #4 |
Форумчанин
Регистрация: 16.04.2010
Сообщений: 695
|
Сделано по совету Hugo121 (со своими корректировками))))
так вам подойдет?: Код:
Единственный способ стать умнее, играть с более умным противником...
|
05.02.2013, 17:13 | #5 |
Форумчанин
Регистрация: 16.04.2010
Сообщений: 695
|
забыл уточнит, запускать макрос с на активном листе (База заказов)
Единственный способ стать умнее, играть с более умным противником...
|
05.02.2013, 17:48 | #6 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
staniiislav, в общем нормально, но если делать так - то массив с() лишний. Можно ведь сразу
If .Exists(u) Then Sheets("Заказы").Range(Sheets("Зака зы").Cells(i, 1), Sheets("Заказы").Cells(i, 11)).Interior.ColorIndex = 37 Доп. массив я думал использовать так - заполнили как у Вас (только зачем Else c(i, 1) = Empty?), затем выгрузили в свободный столбец, далее с помощью specialcells сразу весь нужный диапазон одним махом покрасили, затем метки удалили (тоже одним движением).
webmoney: E265281470651 Z422237915069 R418926282008
|
05.02.2013, 17:56 | #7 |
Форумчанин
Регистрация: 16.04.2010
Сообщений: 695
|
хотя так будет быстрее:
Код:
Единственный способ стать умнее, играть с более умным противником...
|
05.02.2013, 17:58 | #8 | |
Форумчанин
Регистрация: 16.04.2010
Сообщений: 695
|
Цитата:
добавлено позже: тогда вообще так получается (как вы подправили): Код:
хотя если будет очень большой диапазон, то долговато наверное будет красить... хотя проверять надо )))
Единственный способ стать умнее, играть с более умным противником...
Последний раз редактировалось staniiislav; 05.02.2013 в 18:03. |
|
05.02.2013, 18:07 | #9 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
В том то и дело - если красить нужно много, то именно на этом и будет основная потеря времени.
Поэтому всю эту операцию нужно постараться сделать за один приём. Ну а если прогноз, что красить будем примерно 10 строк - то Ваш код уже нет смысла улучшать, разница в скорости будет не заметна. Переменная u в общем тоже лишняя - т.к. используется всего 1 раз. Если использовать чаще (как я обычно использовал t) - тогда смысл есть, чтоб много раз не лезть в массив и не конкатенировать
webmoney: E265281470651 Z422237915069 R418926282008
|
05.02.2013, 18:10 | #10 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 616
|
один японский перец всегда вместо этого
Код:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сравнение двух диапазонов на предмет изменений | strannick | Microsoft Office Excel | 2 | 29.11.2012 00:42 |
Сравнение двух диапазонов ячеек и выбор из них | pavpin | Microsoft Office Excel | 2 | 05.09.2012 21:02 |
Сравнение 3-х диапазонов | Severny | Microsoft Office Excel | 0 | 13.01.2012 12:23 |
Сравнение двух диапазонов и удаление совпадений | Aniqa | Microsoft Office Excel | 5 | 20.07.2011 15:31 |
Сравнение двух диапазонов и удаление совпадений ПОСТРОЧНО (доработка) | pringls | Microsoft Office Excel | 2 | 26.01.2011 16:54 |