Страницы: 1
RSS
Как ускорить работу макроса VBA
 
День  добрый, уважаемые форумчане,  
Вопрос следующий: требуется ускорить работу макроса.    
Как я думаю сам: надо как-то избавиться от вложенных циклов и, наверное, перейти на обратку массивами, но покопавшись в форуме как именно сделать пока не разобрался. Буду рад любому совету. А идеально и примеру кода)  
 
Предыстория: На лист Input sheet каждую неделю, заменяя предыдущие данные, будет копироваться порядка 20-30к строк с данными и потом запускается макрос.  
Как работает макрос:  Берет значение UID, смотрит есть ли такое на листе “Warnings”, если есть, то смотрит в колонку “results”  на наличие кода и увеличивает соответствующий код на 1 (для каждого кода на листах Warnings и Unique sheet идет своя колонка) если кода нет – ничего не делает. Если в “UID” пусто, то берется e-mail и процесс повторяется (Пользователь может иметь uid, а может и не иметь, но учет по UID приоритетен).  
Если макрос находит на листе “Warnings” UID или е-мейл, то он переходит к следующему UID (не сверяя с unique records). Если не находит, то он идет на лист “Unique records”, если такой UID там уже есть, то он приплюсовывает соответствующий код из “Results”, если не находит, то переносит этот UID в конец списка, копируя e-mail и если есть коды из “Results”.  
Когда весь лист Input sheet пройден, то макрос протягивает формулу из колонок P4:V4 до последней строчки, потом идет по колонке  Final (листа Unique records) и если находит код 1 и этой записи ещё нет на листе “Warnings”, то копирует её в конец списка (копирует E-mail, UID и Reason на лист Warnings).  
 
Ещё раз заранее спасибо!
 
Не нашёл как редактировать сообщение, чтобы прикрепить всё архивом, поэтому прикрепляю результат 2ым мессагом.
 
У Вас нет архиватора?  
Для примера можно было несколько строк.
 
Архиватор есть, просто сначала не подумал, что хорошо бы и результат работы макроса прилепить, а как редактировать сообщение, чтобы изменить аттач - не нашел.  
 
Несколько строк из макроса вырезать?
 
<EM>http://www.planetaexcel.ru/forum.php?thread_id=8735</EM>  
О количестве строк там есть.
 
гм... я честно не понимаю - что можно "разбирать" в примерах работы с массивами?  
коллекции, словари, регэкспы и winapi - да...  
 
но массивы?..  
вот что именно вы не поняли в примерах на форуме? и, кстати, каких именно примерах?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Александр, мой кажется первый вопрос на форумах по Экселю как раз и был "что такое массивы и как с ними работать" :)  
И давалось кстати нелегко, пока понял. Окно Locals сильно помогает :)
 
да не...  
я немножко непраильно выразился. сорри.  
это ни в коем случае не "наезд" :)  
Slad, конечно, молодец, что хотя бы слышал о таком чуде и пытался понять/применить...  
 
просто я не понимаю, КАК и ЧТО можно объяснить по массивам, если человек УЖЕ покопался (не просто "посмотрел") хотя бы в нескольких примерах и - "не разобрался" :(  
 
гораздо проще сделать готовое решение.  
а вот как объяснить?..
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Да, я сейчас нашёл ту тему 2009 года - мне там тоже не особо объясняли, просто показали примеры кода. Хотя я уже тогда и сам что-то на firssteps.ru усвоил, но не совсем...  
Хотя это надо бы усвоить ещё в школе/институте - но не все это изучали. Хотя бы просто по возрасту :)
 
vikttur, прочитав правила ещё раз, я нашел только о том, что желательно выкладывать пример, но в прилепленном файле и пример и сам макрос. Не понимаю, что сделал не так) Лучше было бы сам пример выложить в текст сообщения?  
 
ikki, да, вы правы, признаю - я тут немного слукавил, выложенный мной макрос я писал практически с нуля ( т.е. этой мой второй макрос на vba после школьного pascal) и он занял порядка трех дней, а по срокам мне эту задачу закончить надо чем раньше, тем лучше, поэтому и понадеялся, что кто-то поможет уже с готовым решением, в котором бы потом разбирался.  
Сами примеры смотрел на "программерсфоруме". Ну честно говоря, там много чего непонятного мне, и побоялся, что закопаюсь, пока разберусь с самого начала.  
 
Hugo, спасибо за ссылку на firststeps - поструктурирую, что уже узнал.
 
Блин, не залогинился, ответ выше -мой)
 
Да, с firststeps.ru я чуть ошибся, правильный адрес примерно такой:  
http://www.firststeps.ru/vba/excel/vbaexcel1.html  
Ну и много полезного тут можно найти:  
http://msoffice.nm.ru/faq/macros.htm  
 
А по вопросу - на первый взгляд довольно путанно, нужно вникать, работать... Вероятно всем лениво... Мне лениво, врать не буду. Есть занятия поинтереснее.  
Спросите что-нибудь попроще :)
 
{quote}{login=}{date=20.08.2012 05:33}{thema=}{post}Не понимаю, что сделал не так{/post}{/quote}  
>>Зачастую, чтобы понять и помочь - достаточно таблицы на 10-20 строк.  
Вот это и пытаюсь довести до Вас. На будущее.
 
Hugo, ага, на firststeps нашел. Спасибо!  
Лень так лень, тут же все добровольно :)  
 
vikttur, так в приложении и есть файл на 20 строк
 
Как еще объяснить?  
У Вас в приложениЯХ - два файла, общим размером более 100 Кб. Удалить?  
Обычно финты с разделением файла на несколько не проходят. Ну, с этим ладно, у Вас как бы не разделение.  
Да, 20 строк... Но по 4 листа, да в двух файлах... Форум не резиновый, не у всех И-нет безлимитный и быстрый. Это понятно?
 
vikttur, ура, теперь понял, что не так)  
 
Ну смотрите, в принципе, мне не сложно одним архивом перевыложить, если сверху удалить и для форума оно лучше.
Страницы: 1
Читают тему
Наверх