2016-07-04 3 views
0

Мне нужно просмотреть данные с несколькими тысячами строк и отредактировать определенные строки на основе значений нескольких полей (если они соответствуют некоторым критериям).Проблема эффективности с циклом Excel VBA

Проблема состоит в том, что для обработки циклов требуется около ста секунд (~ 13 секунд за цикл, иногда у меня есть 100 циклов) ... Я попытался также заставить VBA фильтровать таблицу, а затем работать с фильтрованными строками, но потребовалось то же самое время.

While l < CurrAloc And k <= lastrow 
    If Cells(k, g) = "Pass" And Cells(k, h) <> "" And Cells(k, i) = "" And Cells(k, j) = "Available" Then 

    Cells(k, ULDecCol) = CurrCustomer 
    Cells(k, ULFromClassifierCol) = CurrClassifier 
    add_to_log k 
    Sheets("Unit List").Select 
    l = l + 1 
    End If 

    k = k + 1 
Wend 
+1

это весь ваш код? у вас есть 'Sheets (« Список модулей »). Выберите' внутри вашего цикла, который сканирует тысячи строк, как вы говорите, и я не уверен, что вы делаете с этим Select. 'Select' занимает много времени. –

+0

~ 13 секунд много. Вы не должны сталкиваться с проблемами производительности с одним циклом. Может быть, у вас проблемы с вашим 'add_to_log'? Сколько времени потребуется, если вы не записываете этот журнал? Если вы используете выбор другого листа в вашем журнале: попробуйте записать на этот лист без выбора. – Jochen

ответ

1

Попытка

Application.Calculation = xlCalculationManual

перед время цикла с последующим

Application.Calculation = xlCalculationAutomatic

После того, как в конце цикла.

+0

Это так просто, я честно немного смущен :) Спасибо! –

Смежные вопросы