0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 6
|
||||||
1 | ||||||
Как можно ускорить работу макроса Excel с большим кол-вом итерационных циклов?14.01.2016, 18:02. Показов 4170. Ответов 7
Метки нет (Все метки)
Есть задача, которую решил, но хотел бы ускорить работу. Проблема в том что суть программы пройти по строкам и столбцам в 1 таблице, сравнения с значениями в другой таблице, и если условие выполняется вписывать нужное значение в соответствующую ячейку, вот кусок проги:
Количество циклов примерно равно: 30000 * 76 * 20 = 45,6 миллионов циклов. Скорость выполнения примерно 1.5-2 часа. Подскажите, у кого какие идеи?
0
|
14.01.2016, 18:02 | |
Ответы с готовыми решениями:
7
как по-умному организовать работу с большим кол.-вом слоев Как вычислить что-то с большим кол-вом неизвестных? Можно ли ускорить работу макроса Посчитать стоимость продуктов с большим кол-вом данных |
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
||||||
14.01.2016, 18:43 | 2 | |||||
Сообщение было отмечено Kuznetsovka как решение
Решение
1. если влезет всё в память - взять данные в массивы, перебирать их.
2. цепочку (все цепочки) AND преобразовать в лесенку IF-THEN, вглубь положить наиболее вероятное, снаружи наименее. Добавлено через 30 минут Ещё - вот это
0
|
Модератор
|
|||||||||||
14.01.2016, 20:54 | 3 | ||||||||||
а это разве возможно
в былые времена я бы сделала так
1
|
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 6
|
|
15.01.2016, 09:44 [ТС] | 4 |
Да, Вы правы, на самом деле там ИЛИ. Старый вариант кода.
If Arhiv.Cells(z, 6).Value >= 17 Or Arhiv.Cells(z, 6).Value <= 5 Then Спасибо за совет. Суть уловил, но сомневаюсь, что это значительно ускорит процесс. Сегодня протестирую.
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
15.01.2016, 09:47 | 5 |
Массивы ускорят раз так в 40.
Изменения с AND ускорят раза в 3.
0
|
Модератор
|
|
15.01.2016, 12:25 | 6 |
В массив удобно списать лист АРХИВ --в него нет обратной записи, но сложность, если позиции R24 не окажется в в АРХИВ, что даст ошибку адресации
0
|
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 6
|
|
19.01.2016, 12:13 [ТС] | 7 |
Всем спасибо, после сегоднешнего теста вот что получилось: кол-во циклов: 50 668 800.
1. Прогнал свой вариант с разделениес If and на 2 if. 2. Прогнал предложенный вариант Sub Test160114(). Получил удивительный результат: 1. Время решения: 12:48. 2. Время решения: 24:33. Разделение If and уменьшило время выполнения примерно в 3 раза.
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
19.01.2016, 12:35 | 8 |
Всё логично - при AND всегда проводятся все проверки, указанные в строке, а при вложенных IF только нужные - если не прошла первая, то остальные не производятся. Если всё это ещё происходит с ячейками - разница будет заметна.
0
|
19.01.2016, 12:35 | |
19.01.2016, 12:35 | |
Помогаю со студенческими работами здесь
8
Работа с большим кол-вом строк, словари, массивы, коллекции Нужна помощь в составлении алгоритма с большим кол-вом задек Компактный корпус с большим кол-вом слотов под hdd Как ускорить работу макроса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |