День добрый, уважаемые форумчане,
Вопрос следующий: требуется ускорить работу макроса.
Как я думаю сам: надо как-то избавиться от вложенных циклов и, наверное, перейти на обратку массивами, но покопавшись в форуме как именно сделать пока не разобрался. Буду рад любому совету. А идеально и примеру кода)
Предыстория: На лист 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).
Ещё раз заранее спасибо!
Вопрос следующий: требуется ускорить работу макроса.
Как я думаю сам: надо как-то избавиться от вложенных циклов и, наверное, перейти на обратку массивами, но покопавшись в форуме как именно сделать пока не разобрался. Буду рад любому совету. А идеально и примеру кода)
Предыстория: На лист 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).
Ещё раз заранее спасибо!