Добрый день, уважаемые коллеги! Столкнулся со следующей проблемой. Есть 2 листа (№1 и №2) Excel с разным (но фиксированным) количеством столбцов и очень большим (и не фиксированным) количеством строк. В листе №1 количество строк 50000-150000, в листе №2 - до 100000. В каждом листе есть заполненный столбец уникальных идентификаторов (строка из 12 цифр), уникальность и наличие значения в нужном формате в этом столбце гарантируются. Есть макрос, который проверяет наличие идентификаторов из Листа№2 в Листе№1 и при наличии совпадения пишет сводные данные в Лист №3. Макрос работает, но адски медленно: при 118000 строк в Листе №1 и 50000 строк в Листе №2 выполнение макроса занимает у меня около 1.5-2 часов. Я попробовал переписать его так, чтобы в цикле заполнялся двумерный динамический массив, и потом этот массив вставлялся целым куском в Лист №3, однако, сколько-нибудь заметного прироста производительности это не дало, т.к. из-за невозможности динамического изменения первой размерности динамического массива с сохранением данных, получившийся массив приходится транспонировать перед вставкой - тоже в цикле, т.к. Application.transpose() с такими количествами строк не работает. Пробовал отключать/останавливать фоновые процессы вроде обновления экрана - вот до 1,5-2 часов получилось упасть, было дольше. Вопрос, можно ли разогнать макрос ещё больше, хотя бы в 2-3 раза? В этой теме http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=77861&... подсмотрел идею поделить массив на блоки и работать с ними, но в моём случае это не прокатит, т.к. строки между собой не группируются, и все являются уникальными.
Буду признателен за любые дельные советы по ускорению алгоритма. Сам сейчас думаю в направлении того, чтобы отсортировать самый большой из списков идентификаторов и проходить по нему алгоритмом быстрого поиска, а не перебором.
P.S. В примере, разумеется, все данные вымышленные и длина списков минимальная. Макрос там же.