Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Оптимизация времени выполнения цикла For
 
ikki, спасибо за объяснеие. Теперь буду сводить операции с ячейками к минимуму. Однако, оптимизации действительно нет предела. :-)

Казанский, спасибо за такой вариант. Открыл для себя функцию Evaluate. Уже использовал, но не для замены цикла.

Господа, может еще подскажете с таким вопросом.

В коде выше используется запись в ячейку пустого множества ("" или Empty). Однако, при дальнейшей работе с этой ячейкой она воспринимается формулой моды, например, как 0, вместо пустой ячейки. Мода пустые ячейки пропускает, а такие нет и выдает результат 0, если таких пустых много.
Вопрос, как сделать, чтобы ячейка была действительно пустой?

Как вариант Range.Clear так делает, однако я не знаю как применить Clear к ячейке, записанной в массив, например, как в коде ikki.


Заранее спасибо.
Изменено: Tialas - 10.02.2014 03:27:28
Оптимизация времени выполнения цикла For
 
Казанский, расскажите, пожалуйста, как, если не лениво.  :)
Оптимизация времени выполнения цикла For
 
Спасибо всем огромное, за такие оперативные советы.

ikki, ваш способ оказался идеальным. Сократил время с 40 (!) мин до 3-4 секунд.
Было бы здорово, если б вы вкратце объяснили почему так получилось, а то понимания у меня нет.

Scripter, wowick, в связи с вышесказанным не вижу смысла оптимизировать логическое условие или отключать обновление экрана, это дает не такие впечатляющие результаты.

Я рад, что присоединился к такому замечательному сообществу.
Изменено: Tialas - 08.02.2014 15:58:29
Оптимизация времени выполнения цикла For
 
Доброго времени суток!
Одним из действий нужного мне макроса есть удаление всех значений цены, которые отличаются от моды более чем на 20%.
Цены расположены в произвольном кол-ве столбцов. Один столбец - один продукт. В данном случае 13 столбцов по 2000 строк.
Для этого написал такой цикл:
Код
For m = 26 To qcol
    For i = 2 To qrow
        If Sheets("Лист1").Cells(i, m).Value * 0.8 > Sheets("Лист2").Cells(2, m).Value Or Sheets("Лист1").Cells(i, m).Value * 1.2 < Sheets("Лист2").Cells(2, m).Value Then Sheets("Лист1").Cells(i, m).Value = ""
    Next i
Next m
 
qcol - переменная с номером последнего столбца
qrow - переменная с номером последней строки.

В ячейках на Лист2 записаны значения моды для этого продукта, разные для каждого столбца.

Цикл рабочий, однако очень долго выполняется.
Посоветуйте, пожалуйста, как можно добиться такого же результата, но быстрее. Прошу объяснять как для тупых, т.к. это мой первый макрос и с VBA я пока не сильно знаком.
Заранее спасибо.   :)
Страницы: 1
Наверх