какие именно? если в моих кодах то это потому, что заменил 8000 на 500. Коллекция диапазонов стала шустрее. Если про вообще - то многое от железа зависит. У меня на работе на разных серваках - тоже разные цифры. Единственная цифра, которая меня смущает - это в "Мяу" ... ну это RAN может подскажет.
какие именно? если в моих кодах то это потому, что заменил 8000 на 500. Коллекция диапазонов стала шустрее. Если про вообще - то многое от железа зависит. У меня на работе на разных серваках - тоже разные цифры. Единственная цифра, которая меня смущает - это в "Мяу" ... ну это RAN может подскажет.
Единственная цифра, которая меня смущает - это в "Мяу" ... ну это RAN может подскажет.
Подскажу. Это единственный макрос с не отключенным пересчетом. Отключил пересчет, и поправил ошибку с последним блоком (погоды не делало, но и часть строк не прятало). Slavick 0,4375 Mikael 0,6484 bmv98rus 1,1719 Karataev 0,5469 ArrayUnion 0,3594 Slavick_ArrayAndDic 0,0469 Мяу 0,0938
Конкатенация и preserve - тормоза известные.
PS В файле TestHideRows2.xlsm на Лист1 Slavick стопорит на строке [vba]
Код
RH.EntireRow.Hidden = True
[/vba]
PPS Fencer, вам крупно повезло, что народ speed'ом решил померяться
Единственная цифра, которая меня смущает - это в "Мяу" ... ну это RAN может подскажет.
Подскажу. Это единственный макрос с не отключенным пересчетом. Отключил пересчет, и поправил ошибку с последним блоком (погоды не делало, но и часть строк не прятало). Slavick 0,4375 Mikael 0,6484 bmv98rus 1,1719 Karataev 0,5469 ArrayUnion 0,3594 Slavick_ArrayAndDic 0,0469 Мяу 0,0938
Конкатенация и preserve - тормоза известные.
PS В файле TestHideRows2.xlsm на Лист1 Slavick стопорит на строке [vba]
Код
RH.EntireRow.Hidden = True
[/vba]
PPS Fencer, вам крупно повезло, что народ speed'ом решил померяться RAN
Вот смотрю, все меняют код VBA. Я ничего не менял в коде, только протянул до конца листа формулы в столбцах 10, 11 и 14 (EXCEL 2003). Код стал выполнятся раз в 10 быстрее. Файл не смог приложить, т.к. 7,5 Мб.
Вот смотрю, все меняют код VBA. Я ничего не менял в коде, только протянул до конца листа формулы в столбцах 10, 11 и 14 (EXCEL 2003). Код стал выполнятся раз в 10 быстрее. Файл не смог приложить, т.к. 7,5 Мб.andrey42
. Кстати только заметил, что мы с RAN, практически одинаковым способом решали задачу только я сразу прятал строки, при достижении длины строки адреса, а Андрей - перезаписывал значение словаря, и еще и preserve использовал. Используя гибрид наших подходов- можно еще немного ускорить код. Создал еще две процедуры: Slavick_ArrayAndDic2 - гибрид со словарем Slavick_ArrayAndString - гибрид со СТРИНГом Результаты: [vba]
[/vba] Slavick_ArrayAndString - подойдет и для МАСа, поскольку там нет словаря. . [vba]
Код
Sub Slavick_ArrayAndString() Dim rng As Range, rHide As Range, arr, i As Long Dim s$, sF$, t#, n&
Cells.EntireRow.Hidden = False Application.ScreenUpdating = False Application.Calculation = xlCalculationManual t = Timer Set rng = ActiveSheet.UsedRange.Columns("N") n = rng.Row arr = rng.Value s = "A" For i = 1 To UBound(arr) If arr(i, 1) = 0 Then s = s & (i + n - 1) & ",A" ' =====check len=============== ii = ii + Len(Format(i + n, 0)) + 2 If ii >= 250 Then sF = sF & "|" & Left(s, Len(s) - 2) ii = 0 s = "A" End If ' ==================== End If Next i If Len(s) Then sF = sF & "|" & Left(s, Len(s) - 2) If Len(sF) Then arr = Split(sF, "|") For i = 1 To UBound(arr) Range(arr(i)).EntireRow.Hidden = True Next End If Debug.Print "Slavick_ArrayAndString "; Format(Timer - t, "0.0000") Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
. Кстати только заметил, что мы с RAN, практически одинаковым способом решали задачу только я сразу прятал строки, при достижении длины строки адреса, а Андрей - перезаписывал значение словаря, и еще и preserve использовал. Используя гибрид наших подходов- можно еще немного ускорить код. Создал еще две процедуры: Slavick_ArrayAndDic2 - гибрид со словарем Slavick_ArrayAndString - гибрид со СТРИНГом Результаты: [vba]
[/vba] Slavick_ArrayAndString - подойдет и для МАСа, поскольку там нет словаря. . [vba]
Код
Sub Slavick_ArrayAndString() Dim rng As Range, rHide As Range, arr, i As Long Dim s$, sF$, t#, n&
Cells.EntireRow.Hidden = False Application.ScreenUpdating = False Application.Calculation = xlCalculationManual t = Timer Set rng = ActiveSheet.UsedRange.Columns("N") n = rng.Row arr = rng.Value s = "A" For i = 1 To UBound(arr) If arr(i, 1) = 0 Then s = s & (i + n - 1) & ",A" ' =====check len=============== ii = ii + Len(Format(i + n, 0)) + 2 If ii >= 250 Then sF = sF & "|" & Left(s, Len(s) - 2) ii = 0 s = "A" End If ' ==================== End If Next i If Len(s) Then sF = sF & "|" & Left(s, Len(s) - 2) If Len(sF) Then arr = Split(sF, "|") For i = 1 To UBound(arr) Range(arr(i)).EntireRow.Hidden = True Next End If Debug.Print "Slavick_ArrayAndString "; Format(Timer - t, "0.0000") Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
[offtop] SLAVICK, RAN, Mikael, Karataev, Одно могу сказать, если б так вылизывался каждый код, то конечно половина программ еще б не функционировала, но те что были написана и пользователю предложены - летали б и не грели процессор по чем зря. Респект вам за желание добиться максимального результата.[/offtop]
[offtop] SLAVICK, RAN, Mikael, Karataev, Одно могу сказать, если б так вылизывался каждый код, то конечно половина программ еще б не функционировала, но те что были написана и пользователю предложены - летали б и не грели процессор по чем зря. Респект вам за желание добиться максимального результата.[/offtop]bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Внедрил оптимизированные код (Slavick_ArrayAndDic) в программу и активно теперь ей пользуются. Все отлично работает, но иногда в некоторых файлах код не работает, пишет "run-time error 5". Что то поделаешь в файле, заново значения введешь и код заработает, а бывает и нет. Как бороться с этой ошибкой? Из-за чего она возникает?
Внедрил оптимизированные код (Slavick_ArrayAndDic) в программу и активно теперь ей пользуются. Все отлично работает, но иногда в некоторых файлах код не работает, пишет "run-time error 5". Что то поделаешь в файле, заново значения введешь и код заработает, а бывает и нет. Как бороться с этой ошибкой? Из-за чего она возникает?Fencer