#excel #vba #loops
#excel #vba #циклы
Вопрос:
В настоящее время я пытаюсь оптимизировать код VBA с предельным временем выполнения (56 часов и более на высокопроизводительных ПК). Основная проблема — это вложенные циклы (до 8) из-за сложных итеративных вычислений и диапазонов ссылок в формулах.
У меня есть два вопроса:
1) Какие циклы наиболее предпочтительны в VBA (исходя из их аппаратной нагрузки из-за отсутствия лучшего слова)
2) Есть ли способ ссылаться на диапазон переменных ячеек в формуле? Например , в формуле:
=AGGREGATE(15,6,SQRT((R2C10:R500000C10-RC[10])^2 (R2C11:R500000C11-RC[11])^2 (R2C12:R500000C12-RC[12])^2),1)
Я ссылаюсь на относительную ячейку: «R500000C10». Есть две основные проблемы: во-первых, полмиллиона ячеек могут не захватывать все данные, хотя в большинстве случаев активных ячеек меньше, в тех же случаях это может быть проблемой. Во-вторых, сканирование такого количества ячеек занимает целую вечность (одна и та же ссылка используется во многих ВПР).
Первая проблема может быть решена путем ссылки на весь столбец, но это усугубляет вторую проблему.
Я хотел бы сослаться на это аналогично тому, как работает xlDown:
Range().End(xlDown).Select
Проблема в том, что мне нужно будет ссылаться на него в Active.Cell.FormulaR1C1. Есть ли способ сделать это?
Спасибо!
Комментарии:
1. Вы уверены, что Excel является лучшим средством для этого?
2. Определенно нет. Я пытался сделать это в Python pandas, но это невозможно. Одна вещь, которую я изучаю, — это Elasticsearch
Ответ №1:
Ну, вы написали, что у вас есть код с 8 циклами и пытаетесь его оптимизировать, может быть, вы можете отредактировать и поместить часть этого кода, потому что ваше описание очень общее, однако, с информацией, которую вы предоставили, я предполагаю, что о вашей точке зрения 1) это зависит от того, что вы хотите сделать? поскольку каждый «цикл» имеет свое собственное применение для определенных сценариев 2) для этого есть хитрости, но все зависит от того, что вы пытаетесь сделать и почему вы хотите использовать.FormulaR1C1 опять же, я размышляю, но вы можете попробовать разделить свои циклы в независимой функции, и, возможно, вы помещаете формулу внутрьячейки, и вопрос в том, почему? вы можете создавать функции и подразделы в своем коде VBA и выполнять «экстремальное выполнение» без использования xtra «ресурсов»
Комментарии:
1. В настоящее время код выполняется, но я опубликую важные части здесь вечером или завтра.