|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
14.04.2008, 14:12 | #1 |
Форумчанин Подтвердите свой е-майл
Регистрация: 14.11.2007
Сообщений: 163
|
Как сократить время? МАКРОС!
Привет!
Очень большой список где-то 61000 строк. нужно стереть полностью строки где во второй строке (В) есть цифра 2 (их большинство). Использую код: Код:
Jungo must die!!! (C) Bill Gates.
|
14.04.2008, 14:18 | #2 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
А перед Вашим кодом есть строка, запрещающая обновление экрана?
Код:
Чем шире угол зрения, тем он тупее.
|
14.04.2008, 14:24 | #3 |
Форумчанин Подтвердите свой е-майл
Регистрация: 14.11.2007
Сообщений: 163
|
Нет. Я помню что это обсуждалось, но экономит ли это время?
Jungo must die!!! (C) Bill Gates.
Последний раз редактировалось jungo; 14.04.2008 в 14:27. |
14.04.2008, 14:33 | #4 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
В Вашем случае - значительно.
Можно еще попробовать "накопить" нужные строки при помощи оператора Union. Затем сделать Union.Delete. Но позволит ли данный оператор столько аргументов - не пробовал (хотя пишут, что не ограничено). Будет ли это быстрее - нужно пробовать. При таком подходе - нет непосредственной работы со строками листа в цикле. Я так думаю, что результат будет таким же, как и при запрете на обновление.
Чем шире угол зрения, тем он тупее.
|
14.04.2008, 14:55 | #5 | |
Форумчанин Подтвердите свой е-майл
Регистрация: 14.11.2007
Сообщений: 163
|
Цитата:
Вариант с запретом обновления экрана не удался... 6000 строк за 15 минут. Можно поподробней о варианте "попробовать "накопить" нужные строки при помощи оператора Union"?
Jungo must die!!! (C) Bill Gates.
|
|
14.04.2008, 16:26 | #6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Можно вручную отключить режим автоматического пересчета проверить эффект, а потом внедрить в процедуру.
Application.Calculation = xlManual. Предлагаю попробовать такой вариант: строки не удалять, а очистить содержимое. Потом все отметить и отсортировать... Но это так - запасной вариант. Отключение автопересчета и запрет на обновление экрана у меня всегда давали существенный прирост в скорости выполнения аналогичных процедур для больших массивов, когда данные правились непосредственно на листе. Все работало быстрее не на 20-30%, а в 10, 20, 50 раз быстрее.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
15.04.2008, 05:38 | #7 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Предлагаю вариант (упомянутый выше), который на протяжении всей работы макроса вообще не "трогает" строки листа. Поиск и накопление номеров строк, удовлетворяющих заданному условию, происходит в памяти, а затем на листе выполняется единственная команда Delete.
Для теста, создал на листе два столбца значений в 6000 строк, где в столбце "B" было несколько тысяч значений "2". Время выполнения макроса составило менее 2 сек. Конечно, нужно заметить, что нет ни ссылок, ни формул, но попробуйте. Код:
Чем шире угол зрения, тем он тупее.
|
15.04.2008, 12:58 | #8 |
Форумчанин Подтвердите свой е-майл
Регистрация: 14.11.2007
Сообщений: 163
|
SAS888
Большое спасибо за помощь! Протестировал, и что получилось: 61000 строк - Не дождался, больше 10-ти минут ждал. 40000 строк - Тоже не дожидался хотя не ждал больше 5-ти минут. 27000 строк - ЗАРАБОТАЛО!!! но только через 2-3 минуты. 2-3 минуты на пол массива значит 4-6 минут на массив, но этого не произошло что говорит о том, что на такое количество строк этот вариант не годен. Ещё раз огромное спасибо! IgorGO Можешь подробней насчёт своей идеи?
Jungo must die!!! (C) Bill Gates.
Последний раз редактировалось jungo; 15.04.2008 в 13:32. Причина: 37000 - 27000 |
15.04.2008, 13:46 | #9 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Странно! Протестировал на 65536 строк (у меня Excel 2003). Все работает. Время выполнения около 7 сек. (Зависит от быстродействия комп.). Посмотрите вложение. Здесь макрос "Zapolnenie" - вставляет значение 2 во все ячейки столбца "B". Макрос "Udalenie" - собственно, рабочий макрос.
Просьба к участникам форума: протестируйте, пожалуйста.
Чем шире угол зрения, тем он тупее.
|
22.04.2008, 13:36 | #10 | |
Форумчанин Подтвердите свой е-майл
Регистрация: 14.11.2007
Сообщений: 163
|
Цитата:
Извиняюсь что долго не отвечал, был на отдыхе. Ты прав что-то в моём массиве тормозит... Но что??? Формул нет. Что может ещё тормозить?
Jungo must die!!! (C) Bill Gates.
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Макрос для копирования | knyz | Microsoft Office Excel | 28 | 11.01.2009 06:12 |
Макрос 2007 | ditoch | Microsoft Office Excel | 6 | 24.06.2008 11:09 |
макрос VBA Excel | Bor | Microsoft Office Excel | 5 | 25.01.2008 12:20 |
Макрос | Мингиян | Microsoft Office Access | 1 | 24.01.2008 21:54 |
Макрос в Word | Mictiann | Microsoft Office Word | 1 | 12.09.2007 09:35 |