Вопрос к опытным знатокам по поводу ускорения работы моего кода. Суть - удаление значений в столбце Q по условию < 10 Т.к. новичок, то писал его долго и кропотливо, но все равно при количестве строк более 1000 процесс начинает занимать прилично времени. Для меня было удивление, что вначале замена совпавших условий на текст, а потом удаление ячеек с текстовым названием занимает в разы меньше времени, чем обычное удаление. Подскажите. что еще можно добавить, убрать, дописать для ускорения работы. Спасибо.
Вопрос к опытным знатокам по поводу ускорения работы моего кода. Суть - удаление значений в столбце Q по условию < 10 Т.к. новичок, то писал его долго и кропотливо, но все равно при количестве строк более 1000 процесс начинает занимать прилично времени. Для меня было удивление, что вначале замена совпавших условий на текст, а потом удаление ячеек с текстовым названием занимает в разы меньше времени, чем обычное удаление. Подскажите. что еще можно добавить, убрать, дописать для ускорения работы. Спасибо.rever27
Sub example_02_1() Application.ScreenUpdating = False Rows(1).Insert With Range("Q1", Cells(Rows.Count, "Q").End(xlUp)) .Cells(1).Value = "temp" .AutoFilter Field:=1, Criteria1:="<=10" .Offset(1).EntireRow.Delete .AutoFilter .Parent.UsedRange End With Rows(1).Delete Application.ScreenUpdating = True End Sub
Sub example_02_1() Application.ScreenUpdating = False Rows(1).Insert With Range("Q1", Cells(Rows.Count, "Q").End(xlUp)) .Cells(1).Value = "temp" .AutoFilter Field:=1, Criteria1:="<=10" .Offset(1).EntireRow.Delete .AutoFilter .Parent.UsedRange End With Rows(1).Delete Application.ScreenUpdating = True End Sub
nilem, Спасибо за вариант решения. Только в моем случае он немного не работает.
Сколько не ломал голову, так и не понял, зачем вы добавляете строку, а затем удаляете. Основная проблема в том, что меня не постоянный диапазон фильтруемых значений, а от текущей активной ячейки до последней заполненной. Если в активном диапазоне есть значения для удаления, то все работает отлично, но если нет - он удаляет и нужные результаты. Подскажите решение
nilem, Спасибо за вариант решения. Только в моем случае он немного не работает.
Сколько не ломал голову, так и не понял, зачем вы добавляете строку, а затем удаляете. Основная проблема в том, что меня не постоянный диапазон фильтруемых значений, а от текущей активной ячейки до последней заполненной. Если в активном диапазоне есть значения для удаления, то все работает отлично, но если нет - он удаляет и нужные результаты. Подскажите решениеrever27
With Range(Cells(CurrentStart, MyColumn), Cells(Rows.Count, MyColumn).End(xlUp)) ' .Select .Cells(1).Value = "temp" 'временный заголовок для фильтруемого диапазона .AutoFilter Field:=1, Criteria1:="<=10" .EntireRow.Delete 'удаляем вместе с временным заголовком End With
Application.ScreenUpdating = True End Sub
[/vba] раскомментируйте Select и пройдите в пошаговом режиме (по F8), чтобы было наглядно
Попробуйте вот так: [vba]
Код
Sub b_DeleteConditions_03() Application.ScreenUpdating = False
With Range(Cells(CurrentStart, MyColumn), Cells(Rows.Count, MyColumn).End(xlUp)) ' .Select .Cells(1).Value = "temp" 'временный заголовок для фильтруемого диапазона .AutoFilter Field:=1, Criteria1:="<=10" .EntireRow.Delete 'удаляем вместе с временным заголовком End With
Application.ScreenUpdating = True End Sub
[/vba] раскомментируйте Select и пройдите в пошаговом режиме (по F8), чтобы было наглядноnilem
nilem, Вчера мучился вопросом, почему же все равно процесс удаления идет так долго, когда строк более 1500, и обнаружил, что если вначале отсортировать строки по возрастанию, а только потом удалять их из фильтра, то скорость обработки изменится с 5-6 секунд до 1 секунды. Подумал, возможно вам будет интересно
nilem, Вчера мучился вопросом, почему же все равно процесс удаления идет так долго, когда строк более 1500, и обнаружил, что если вначале отсортировать строки по возрастанию, а только потом удалять их из фильтра, то скорость обработки изменится с 5-6 секунд до 1 секунды. Подумал, возможно вам будет интересноrever27
nilem, Я честно старался, 40 минут преобразовывал мой код для Вас, но ничего не вышло. Весь кидать смысла нет, а разбивать частями - понял что пол дня уйдет, ибо код включает 4 других в себя по проверкам на текущую позицию, значения ячеек и т.п. Возможно скорость падает из-за того, что постоянно перескакивает по макросам. Скажу только, что через timer без сортировки на 5000 строк удаления вышла 36,91 секунда, с сортировкой - 1,2304
nilem, Я честно старался, 40 минут преобразовывал мой код для Вас, но ничего не вышло. Весь кидать смысла нет, а разбивать частями - понял что пол дня уйдет, ибо код включает 4 других в себя по проверкам на текущую позицию, значения ячеек и т.п. Возможно скорость падает из-за того, что постоянно перескакивает по макросам. Скажу только, что через timer без сортировки на 5000 строк удаления вышла 36,91 секунда, с сортировкой - 1,2304rever27