Excel 2010 For Next Loop становится все медленнее

Окончательное решение этой проблемы состоит в том, чтобы перейти к синтаксису синтаксиса C + 11, если вы можете.

A a{};

http://www.stroustrup.com/C++ 11FAQ.html # равномерная-INIT

0
задан Pᴇʜ 6 March 2019 в 09:59
поделиться

1 ответ

Из того, что я могу расшифровать из вашего кода.

1-выберите А1 и в конце (вниз) до последней ячейки + 1, затем сделайте эту ячейку = "abc"

2-Вы не знаете, как начать с А2, поэтому у вас есть if cell starts with a then rowstart=2 [ 116]

Выполните 3 цикла по каждой ячейке и найдите «bcd» или «efgh» и удалите строки

4-ступенчатый цикл при переходе к исходному «abc»

[119 ] 5-Назовите оставшийся диапазон ячеек со значением в A1


Самый быстрый способ, который я нашел, чтобы удалить значения строк в столбце строк, - использовать функцию VBA replace () и заменить значения с пробелами, вы можете использовать специальные ячейки, чтобы удалить пробелы.

Я заметил в вашем коде, что вы используете end(xldown), который показывает мне, что в ваших данных нет пробелов для запуска, поэтому замена этих конкретных ячеек на пробелы будет работать.

Для пары тысяч строк результат очень быстрый, хотя не уверен насчет десятков тысяч строк.

Проверьте это.

Sub Button1_Click()
    Dim sh As Worksheet, rng As Range
    Set sh = ActiveSheet

    With sh
        Set rng = .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)

        With rng
            .Replace what:="bcd", replacement:="", lookat:=xlPart, MatchCase:=False
            .Replace what:="efgh", replacement:="", lookat:=xlPart, MatchCase:=False
            .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        End With

        .Range("A2:J" & .Cells(.Rows.Count, "A").End(xlUp).Row).Name = .Range("A1").Value
    End With

End Sub
0
ответ дан Davesexcel 6 March 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: