|
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 6
|
||||||
Ускорение работы макроса22.03.2012, 10:59. Показов 5377. Ответов 22
Метки нет (Все метки)
Добрый день всем!!!
Прошу помочь с нижеприведенным макросом на предмет ускорения его работы.Расчет делает минут 30-40 для 1500 строчек.Для работы необходимо считать около 30 000 строк.Буду очень признателен за советы и за примеры улучшений кода))) ---------
0
|
||||||
| 22.03.2012, 10:59 | |
|
Ответы с готовыми решениями:
22
Ускорение работы макроса (преобразование данных к нужному формату)
|
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
|
| 22.03.2012, 12:38 | |
|
единственное предложение - считать всё в массивы (одной строкой) и работать.
Потом вывалить готовые результаты на лист. Без файла примера плохо вникать в работу макроса
0
|
|
|
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
|
|
| 22.03.2012, 12:51 | |
|
Очевидно, вам остро требуется база данных. Я пока не разобрался в коде, но мне кажется, что хранить данные столь сложной структуры и работать с ними на листе Excel нельзя. Надо сделать структуру в том же Access, поместить туда данные, обрабатывать их с помощью SQL-запроса и готовый результат уже выгружать в Excel.
0
|
|
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
|||||||||||
| 22.03.2012, 17:34 | |||||||||||
|
1500 это количество чего?
У тебя 7 вложенных циклов. В каждом происходит чтение и запись в ячейки. Это самая длительная операция. Надо считывать в массивы и кое что загонять в словари. Например самый внутренний цикл
Имеются ненужные условия:
Добавлено через 2 минуты Лучше приложи образцы что есть и что надо получить
0
|
|||||||||||
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
||||||
| 23.03.2012, 14:02 | ||||||
|
1. +1 к идее загнать все в массив и с ним работать
2. WorksheetFunction - формулы рабочего листа не должны многократно пересчитываться в цикле, если они считают одно и то же. Посчитал один раз, сохранил результат (в переменную, в массив) и дальше используешь многократно результат значения из переменной, из массива. 3. Бывает, что меняешь данные на листе внутри таблицы, а на каждом шаге цикла пересчитываются куча формул в зависимых ячейках. Во многие макросы, не вникая в код делаю 2 вставки (в начале до работы и в конце - после работы):
0
|
||||||
|
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
|
|||||||
| 23.03.2012, 14:08 | |||||||
0
|
|||||||
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|
| 23.03.2012, 14:15 | |
|
Gibboustooth,
ну пусть будет по Вашему, сохранили настройку по умолчанию, потом её восстановили, более умно. Хотя большинство пользователей привыкло и не задумывается никогда, что автоматический расчет формул можно отключить и ничего не пересчитается разве что как по F9. Минус обоих вариантов - если макрос навернется на пол пути, скажем, из-за Application Error, то оба варианта привещдут к потере изначальной настройки Excel, чем и череват обычно этот метод.
0
|
|
|
|
|||||||
| 23.03.2012, 15:05 | |||||||
![]() kolamba1986, сообщите на сколько ускорилась работа.
0
|
|||||||
| 23.03.2012, 15:14 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 6
|
||
| 26.03.2012, 10:38 [ТС] | ||
|
Приложил рабочий файл. если возможно то по-подробнее опишите как затем работать с массивом.
0
|
||
|
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 6
|
|
| 26.03.2012, 10:43 [ТС] | |
|
что то не зацепилось вложение
0
|
|
|
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 6
|
||
| 26.03.2012, 11:09 [ТС] | ||
|
Alex77755
1500 это количество строк которые необходимо распланировать по графику. на примере for f необходимо гонять миллион раз т.к. для каждой детали необходимо понять кто ее будет делать. образцы приложил.надеюсь дополнят картину Добавлено через 18 минут
0
|
||
|
|
|
| 26.03.2012, 23:50 | |
|
Все переменные занес в массивы. Убрал еще несколько лишних условий.
Время выполнения макроса NLR - считанные секунды, NLR_prom - 15 минут. В исходном коде имеются ошибки в адресации, при работе с массивами это вызывало ошибки выхода за границы массивов. Такие области я пометил комментариями с лидирующими знаками !!!
0
|
|
|
|
|
| 27.03.2012, 14:00 | |
|
Время работы:
NLR - 0 мин. 55 сек. NLR_prom - 5 мин. 08 сек. ![]() Оптимизирован алгоритм суммирования переменных: plan_perioda narast_potrbnost narast_proizvedeno narast_proizvedeno_na_datu narast_proizvedeno_na_datu_verh с введением дополнительных массивов: mProizvedenoSum(1597) mProizvedenoSumNakop(1597, 320) Прежние замечания (метки !!!) в силе. (Система: Windows 7, Офис 2007, ПроцессорIntel(R) Core(TM) i7 CPU 930 @ 2.80GHz, 2801 МГц, ядер: 4, логических процессоров: 8, RAM 4,00 ГБ)
0
|
|
|
|
||||||
| 27.03.2012, 17:24 | ||||||
|
Изменено исправление зоны ошибки размерности в NLR_prom:
1
|
||||||
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
|
| 28.03.2012, 00:02 | |
|
Почитай про группировку
0
|
|
|
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 6
|
|
| 28.03.2012, 17:51 [ТС] | |
|
макрос NLR считается корректно за исключением потерянных 7-х знаков после запятой.
где-то нужно поменять тип переменной? а вот со вторым NLR_prom незадача: цифры считаются некорректно; не все значения раскладываются по графику как должны были бы. Пока не понял почему так.Слишком неузнаваяемо поменян код))))))))
0
|
|
| 28.03.2012, 17:51 | |
|
Помогаю со студенческими работами здесь
20
Оптимизация работы макроса
Завершение работы макроса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|