До цикла медленное выполнение - альтернативы для смещения и выбора - PullRequest
0 голосов
/ 07 февраля 2019

Код перебирает довольно большие данные (1000 строк по 20 столбцам) и удаляет строки, в которых нет ошибки в ячейке, но в настоящее время выполнение занимает 20 минут.Ищите способ ускорить процесс, устраняя необходимость в смещении и выбирая в коде.

Я пытался включить / выключить автоматический расчет до и после кода, но это не оказало заметного влияния на выполнение.время.Обновление экрана уже выключено.

Range("A6").Select
Do Until IsEmpty(ActiveCell)
    If IsError(ActiveCell) Then
        ActiveCell.Offset(1, 0).Select
    Else
        ActiveCell.EntireRow.Delete
    End If
Loop

Оставляет строки, где ячейка в диапазоне A равна N / A (IsError).Работает, как и ожидалось, но занимает целых 20 минут.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

SpecialCells может быстро найти все формулы, возвращающие логические значения, числа или текст, исключая ошибки.

dim rng as range

with worksheets("sheet1")
    with .range(.cells(6, "A"), .cells(.rows.count, "A").end(xlup))
        on error resume next
        set rng = .specialcells(xlCellTypeFormulas, xlLogical+xlNumbers+xlTextValues)
        on error goto -1
        if not rng is nothing then
            rng.entirerow.delete
        end if
    end with
end with
0 голосов
/ 07 февраля 2019
i=6
With ActiveSheet
     Do Until IsEmpty(.cells(i,1))
        If IsError(.cells(i,1)) Then
             i=i+1
         Else
            .Row(i).Delete
         End If
    Loop
End with
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...