Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2010, 01:08   #11
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Это еще сейчас так получилось - раньше без оптимизации макросы некоторые работали от 20 секунд до 5 минут
В основном, здесь из-за большого количества данных/операций (хотя ~20000 ячеек - еще не так много). Просто некоторые вещи относительно медленные - обращения к каждой ячейке и т.п.
motorway вне форума Ответить с цитированием
Старый 22.05.2010, 01:47   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Просто некоторые вещи относительно медленные - обращения к каждой ячейке и т.п.
Ну так не обращайтесь к ячейкам...

1) Считываем ВСЕ данные с листа в массив
2) Работаем только с массивом исключительно средствами VBA (не затрагивая средства excel - чтобы никаких application, worksheets, cells, worksheetfunctions, и т.д. в коде не было)
3) Заносим данные из массива обратно на лист.

Избавьтесь от всякого форматирования ячеек в коде (цвета, форматы, размеры) - по большому счёту, все эти украшательства нафиг не нужны.

И будет ваш макрос выполняться за 1 секунду.

PS: Кстати, очень сильно тормозит конкатенация длинных текстовых строк в VBA - чем длинее строка, тем больше тормозов.
Если в вашем коде попадаются текстовые переменные, в которые записываются строки длиной в несколько десятков тысяч символов (и длиннее) - обратите на это особое внимание.
Я тут как-то программно (в VBA) формировал файлы CSV - сначала формировал текстовую строку длиной около 500.000 символов, а потом записывал эту строку в файл .csv. Так вот пришлось немало помучиться, чтобы ускорить макрос - как только я перестал собирать все 500000 символов в цикле в одну текстовую переменную, скорость значительно увеличилась (с 30 секунд до 6 секунд)
EducatedFool вне форума Ответить с цитированием
Старый 22.05.2010, 18:24   #13
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Да, конкатенацию у меня уже получилось ускорить. Но вот форматы - с ними проблема. Нужно делать, чтобы текст вида [10.11111,11.11111], к примеру, превращался в [10.1,11.1] для отображения, а исходное значение оставалось. Обычными средствами это не решишь. Поэтому приходится юзать свойство ID, куда и записывать данные. Но оно тоже не супербыстрое.
motorway вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос обработки данных для Excel 2007 Python Фриланс 1 16.02.2010 20:47
Не вставить рисунок в Word 2007-2010 Tongo Microsoft Office Word 0 05.01.2010 20:24
Да тестостерона в 3 раза больше чем норма HellMercenariess Свободное общение 3 25.08.2009 22:52