|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.10.2009, 21:14 | #1 |
Пользователь
Регистрация: 27.10.2009
Сообщений: 11
|
Проблема с низким быстродействием макроса.
Здравствуйте, товарищи.
Возник следующий вопрос, ответ на который, увы, не могу найти самостоятельно. Мной написан макрос, реализующий выбор необходимых значений из нескольких таблиц и запись этих значений в новую таблицу. Так как во входных таблицах нет единообразия ("кривые" они, короче говоря), максимальный диапазон, которым я могу оперировать - ячейка. А поскольку входные таблицы довольно большие (70000*100 ячеек), "поячеечная" вставка значений из одной таблицы в другую типа: Код:
Не подскажете, как можно ускорить передачу значений из одной ячейки в другю? Последний раз редактировалось Lord-of-Hedgehogs; 27.10.2009 в 21:34. |
27.10.2009, 22:06 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
отключить обработку событий, автоматический пересчет формул и проросивку данных на экран. Не забудьте потом включить это все.
я для этого использую три переменных и две процедуры. в результате все выглядит обычно так: Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
28.10.2009, 02:21 | #3 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
1) Скопировать лист с "кривой" таблицей, на копии листа выправить таблицу, и копировать данные уже с этого "исправленного" листа, причём не по одной ячейке, а блоками. 2) Заменить часть макроса формулами. Пусть даже записать при помощи макроса в ячейки нужные формулы, а потом преобразовать формулы в значения. 3) (самый быстрый, но и наиболее трудоёмкий в плане кода, способ) Считать диапазон 70000*100 ячеек в массив (одной строкой, типа arr=[a4:ab70000].value), поиск значений производить в массиве, программно сформировать новый массив, и записать этот массив на Workbooks(name1).worksheets(1) Есть и другие способы оптимизации кода. Не увидев код Вашего макроса полностью, сложно посоветовать что-то конкретное. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание макроса | Ленусик777 | Microsoft Office Excel | 4 | 28.05.2010 14:49 |
Изменение макроса | Vaniq | Microsoft Office Excel | 2 | 25.08.2009 13:45 |
Разблокировка макроса | Deni55 | Microsoft Office Excel | 4 | 18.04.2009 17:58 |
Запуск макроса с параметрами из другого макроса | Saladin | Microsoft Office Excel | 2 | 19.01.2009 09:43 |