Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
18.04.2024, 22:03:28

Войти
На форуме добавлена возможность подписки на RSS-ленты любого раздела форума. Подписаться можно, нажав на иконку RSS , расположенную левее наименования раздела.
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Оптимизация быстродействия макроса по удалению строк
Страниц: 1 [2]  Все   Вниз
Печать
Автор Тема: Оптимизация быстродействия макроса по удалению строк  (Прочитано 10093 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Юрий М
Глобальный модератор
Ветеран
*****

Репутация: +112/-0
Офлайн Офлайн

Сообщений: 2 077



Просмотр профиля E-mail
« Ответ #15 : 30.06.2018, 22:04:44 »

Проверил на 1 000 (466) строк - d_rows_2 немного выигрывает у обоих вариантов.
« Последнее редактирование: 30.06.2018, 22:13:51 от Юрий М » Записан
RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #16 : 01.07.2018, 23:22:43 »

Подготовлено 466 строк для удаления из массива в 1000 строк.
DelRowsRS - 0,0859375
d_rows_1 - 0,1015625
d_rows_2 - 0,078125
delFilter - 4,867188

УдалениеСтрокОднимМахом - 0,1796875
Подготовлено 4666 строк для удаления из массива в 10000 строк.
DelRowsRS - 1
d_rows_1 - 1,296875
d_rows_2 - 3,546875
УдалениеСтрокОднимМахом - 78,05469 Снят с дистанции
delFilter - 47,90625

Подготовлено 14000 строк для удаления из массива в 30000 строк.
DelRowsRS - 9,476563
d_rows_1 - 12,92188
d_rows_2 - 76,78906 Снят с дистанции
delFilter - 141,5078 Снят с дистанции

Фильтр сильно разочаровал  Грустный

Подготовлено 46666 строк для удаления из массива в 100000 строк.
DelRowsRS - 105,1563
d_rows_1 - 138,2578

Подготовлено 93334 строк для удаления из массива в 200000 строк.
DelRowsRS - 372,1094
d_rows_1 - 525,3906

Код: (vb)
Sub delFilter()
    Dim t!, lr&
    t = Timer
    Application.ScreenUpdating = False
    lr = Cells(Rows.Count, 1).End(xlUp).Row
    ActiveSheet.Range("A1:A" & lr).AutoFilter _
    Field:=1, Criteria1:=RGB(255, 255, 0), Operator:=xlFilterCellColor
    ActiveSheet.AutoFilter.Range.Offset(1).EntireRow.Delete
    ActiveSheet.AutoFilter.Range.AutoFilter
    Debug.Print "delFilter - " & Timer - t
    Application.ScreenUpdating = True
End Sub

Код: (vb)
Sub DelRowsRS()
    Dim lr&, n&, i&, ii&
    Dim sF$, s$, spl
    Dim k: k = 4
    Application.ScreenUpdating = False
    lr = Cells(Rows.Count, 1).End(xlUp).Row
    n = ActiveSheet.UsedRange.Row
    s = "A"
    For i = lr To n Step -1
         If Cells(i, 1).Interior.ColorIndex = 6 Then GoSub sRange
    Next
    If Len(s) Then sF = sF & "|" & Left(s, Len(s) - 2)
    If Len(sF) Then
        spl = Split(sF, "|")
        For i = 1 To UBound(spl)
            Range(spl(i)).EntireRow.Delete
            k = k + 1
        Next
    End If
    Application.ScreenUpdating = True
    Exit Sub
sRange:
                s = s & i & ",A"
            '        =====check len===============
            ii = ii + Len(Format(i, 0)) + 2
            If ii >= 248 Then
                sF = sF & "|" & Left(s, Len(s) - 2)
                s = Left(s, Len(s) - 2)
                ii = 0
                s = "A"
            End If
            '        ====================
Return
End Sub

Комментарий администратора убрал лишние $ в коде, чтобы код не задваивался.
« Последнее редактирование: 04.07.2018, 08:55:24 от Дмитрий Щербаков(The_Prist) » Записан

А что ты умеешь?
Учиться...
RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #17 : 02.07.2018, 09:56:02 »

Предыстория создания алгоритма http://www.excelworld.ru/forum/10-36917-1
Записан

А что ты умеешь?
Учиться...
Страниц: 1 [2]  Все   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru