Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Оптимизация кода макроса по скрытию строк - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оптимизация кода макроса по скрытию строк (Макросы/Sub)
Оптимизация кода макроса по скрытию строк
Fencer Дата: Пятница, 19.01.2018, 15:08 | Сообщение № 21
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, извините за глупый вопрос :) , но не подскажите как в вашем коде изменить номер столбца?
 
Ответить
СообщениеSLAVICK, извините за глупый вопрос :) , но не подскажите как в вашем коде изменить номер столбца?

Автор - Fencer
Дата добавления - 19.01.2018 в 15:08
bmv98rus Дата: Пятница, 19.01.2018, 15:25 | Сообщение № 22
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
Парни, я Ваще тут теоретик, если под bmv98rus кодом подразумевается из #7 так еще в #9 я написал что не оптимален.

Для коллекции словарь на коллекции заменить. :-),

а вот смущает меня что
На Лист2
Slavick 9,109375
Mikael 1,625
bmv98rus 2,9375
Karataev 1,417969
ArrayUnion 8,917969
Мяу 0,3164063

и
Slavick 0,1719
Mikael 0,6133
bmv98rus 0,9844
Karataev 0,4805
ArrayUnion 0,1523
Slavick_ArrayAndDic 0,0313
Мяу 1,1523
как то странно меняются цифирки


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеПарни, я Ваще тут теоретик, если под bmv98rus кодом подразумевается из #7 так еще в #9 я написал что не оптимален.

Для коллекции словарь на коллекции заменить. :-),

а вот смущает меня что
На Лист2
Slavick 9,109375
Mikael 1,625
bmv98rus 2,9375
Karataev 1,417969
ArrayUnion 8,917969
Мяу 0,3164063

и
Slavick 0,1719
Mikael 0,6133
bmv98rus 0,9844
Karataev 0,4805
ArrayUnion 0,1523
Slavick_ArrayAndDic 0,0313
Мяу 1,1523
как то странно меняются цифирки

Автор - bmv98rus
Дата добавления - 19.01.2018 в 15:25
Mikael Дата: Пятница, 19.01.2018, 15:26 | Сообщение № 23
Группа: Пользователи
Ранг: Участник
Сообщений: 80
Репутация: 31 ±
Замечаний: 0% ±

Excel 2010
вашем коде изменить номер столбца

Вот в этой строчке задается столбец для проверки.
[vba]
Код
Set rng = ActiveSheet.UsedRange.Columns("N")
[/vba]
 
Ответить
Сообщение
вашем коде изменить номер столбца

Вот в этой строчке задается столбец для проверки.
[vba]
Код
Set rng = ActiveSheet.UsedRange.Columns("N")
[/vba]

Автор - Mikael
Дата добавления - 19.01.2018 в 15:26
SLAVICK Дата: Пятница, 19.01.2018, 16:04 | Сообщение № 24
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
как то странно меняются цифирки

какие именно?
если в моих кодах то это потому, что заменил 8000 на 500. Коллекция диапазонов стала шустрее.
Если про вообще - то многое от железа зависит.
У меня на работе на разных серваках - тоже разные цифры.
Единственная цифра, которая меня смущает - это в "Мяу" ... ну это RAN может подскажет.
Для коллекции словарь на коллекции

не - тут я пас. Вот если бы наоборот, тогда ладно.
Не люблю я коллекции - мне словари ближе. если интересно - баталии по поводу них недавно тут были
я Ваще тут теоретик,

ну так от теории к практике - пару строк кода :) .


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
как то странно меняются цифирки

какие именно?
если в моих кодах то это потому, что заменил 8000 на 500. Коллекция диапазонов стала шустрее.
Если про вообще - то многое от железа зависит.
У меня на работе на разных серваках - тоже разные цифры.
Единственная цифра, которая меня смущает - это в "Мяу" ... ну это RAN может подскажет.
Для коллекции словарь на коллекции

не - тут я пас. Вот если бы наоборот, тогда ладно.
Не люблю я коллекции - мне словари ближе. если интересно - баталии по поводу них недавно тут были
я Ваще тут теоретик,

ну так от теории к практике - пару строк кода :) .

Автор - SLAVICK
Дата добавления - 19.01.2018 в 16:04
bmv98rus Дата: Пятница, 19.01.2018, 16:06 | Сообщение № 25
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop]
пару строк кода

стар я стал, ленив только на пару и хватает :-)[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop]
пару строк кода

стар я стал, ленив только на пару и хватает :-)[/offtop]

Автор - bmv98rus
Дата добавления - 19.01.2018 в 16:06
Fencer Дата: Пятница, 19.01.2018, 18:11 | Сообщение № 26
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Всем спасибо огромное!!! Не ожидал такой отзывчивости. Крутой форум :)

Теперь все отлично работает. Код теперь считает за 1 секунду! Т.е. оптимизация в 200 раз! Круто
 
Ответить
СообщениеВсем спасибо огромное!!! Не ожидал такой отзывчивости. Крутой форум :)

Теперь все отлично работает. Код теперь считает за 1 секунду! Т.е. оптимизация в 200 раз! Круто

Автор - Fencer
Дата добавления - 19.01.2018 в 18:11
RAN Дата: Пятница, 19.01.2018, 19:21 | Сообщение № 27
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Единственная цифра, которая меня смущает - это в "Мяу" ... ну это RAN может подскажет.

Подскажу. Это единственный макрос с не отключенным пересчетом.
Отключил пересчет, и поправил ошибку с последним блоком (погоды не делало, но и часть строк не прятало).
Slavick 0,4375
Mikael 0,6484
bmv98rus 1,1719
Karataev 0,5469
ArrayUnion 0,3594
Slavick_ArrayAndDic 0,0469
Мяу 0,0938

Конкатенация и preserve - тормоза известные. :D

PS В файле TestHideRows2.xlsm на Лист1 Slavick стопорит на строке
[vba]
Код
RH.EntireRow.Hidden = True
[/vba]

PPS Fencer, вам крупно повезло, что народ speed'ом решил померяться :D
К сообщению приложен файл: TestHideRows31.xlsm (73.3 Kb)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Пятница, 19.01.2018, 19:27
 
Ответить
Сообщение
Единственная цифра, которая меня смущает - это в "Мяу" ... ну это RAN может подскажет.

Подскажу. Это единственный макрос с не отключенным пересчетом.
Отключил пересчет, и поправил ошибку с последним блоком (погоды не делало, но и часть строк не прятало).
Slavick 0,4375
Mikael 0,6484
bmv98rus 1,1719
Karataev 0,5469
ArrayUnion 0,3594
Slavick_ArrayAndDic 0,0469
Мяу 0,0938

Конкатенация и preserve - тормоза известные. :D

PS В файле TestHideRows2.xlsm на Лист1 Slavick стопорит на строке
[vba]
Код
RH.EntireRow.Hidden = True
[/vba]

PPS Fencer, вам крупно повезло, что народ speed'ом решил померяться :D

Автор - RAN
Дата добавления - 19.01.2018 в 19:21
RAN Дата: Пятница, 19.01.2018, 19:56 | Сообщение № 28
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Для коллекции словарь на коллекции заменить.

Была мысль в эту сторону, вот только не знаю, как в коллекции собрать адрес
[vba]
Код
If ar1(i, 1) = vFind Then .Item(vFind) = .Item(vFind) & "," & "A" & i
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Для коллекции словарь на коллекции заменить.

Была мысль в эту сторону, вот только не знаю, как в коллекции собрать адрес
[vba]
Код
If ar1(i, 1) = vFind Then .Item(vFind) = .Item(vFind) & "," & "A" & i
[/vba]

Автор - RAN
Дата добавления - 19.01.2018 в 19:56
bmv98rus Дата: Пятница, 19.01.2018, 20:41 | Сообщение № 29
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
RAN, надо добивать, чтоб на МасOS работало :-) Соседей иноланетьян призвать :-)


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Суббота, 20.01.2018, 08:03
 
Ответить
СообщениеRAN, надо добивать, чтоб на МасOS работало :-) Соседей иноланетьян призвать :-)

Автор - bmv98rus
Дата добавления - 19.01.2018 в 20:41
RAN Дата: Пятница, 19.01.2018, 20:50 | Сообщение № 30
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Для огрызка пущай он пишет
К сообщению приложен файл: 4039574.jpg (48.8 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеДля огрызка пущай он пишет

Автор - RAN
Дата добавления - 19.01.2018 в 20:50
andrey42 Дата: Воскресенье, 21.01.2018, 19:11 | Сообщение № 31
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Вот смотрю, все меняют код VBA.
Я ничего не менял в коде, только протянул до конца листа формулы в столбцах 10, 11 и 14 (EXCEL 2003).
Код стал выполнятся раз в 10 быстрее.
Файл не смог приложить, т.к. 7,5 Мб.
 
Ответить
СообщениеВот смотрю, все меняют код VBA.
Я ничего не менял в коде, только протянул до конца листа формулы в столбцах 10, 11 и 14 (EXCEL 2003).
Код стал выполнятся раз в 10 быстрее.
Файл не смог приложить, т.к. 7,5 Мб.

Автор - andrey42
Дата добавления - 21.01.2018 в 19:11
bmv98rus Дата: Понедельник, 22.01.2018, 00:08 | Сообщение № 32
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
andrey42, Задача была не данные изменить чтоб код работал быстрее, а именно изменить код.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщениеandrey42, Задача была не данные изменить чтоб код работал быстрее, а именно изменить код.

Автор - bmv98rus
Дата добавления - 22.01.2018 в 00:08
SLAVICK Дата: Понедельник, 22.01.2018, 10:53 | Сообщение № 33
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Это единственный макрос с не отключенным пересчетом.

а слона то я и не заметил :) .
В файле TestHideRows2.xlsm на Лист1 Slavick стопорит на строке

да - там проверку нужно сделать на RH.
вместо строки:
[vba]
Код
RH.EntireRow.Hidden = True
[/vba]
нужно
[vba]
Код
If Not RH Is Nothing Then RH.EntireRow.Hidden = True
[/vba]
Для огрызка пущай он пишет

lol lol .
Кстати только заметил, что мы с RAN, практически одинаковым способом решали задачу только я сразу прятал строки, при достижении длины строки адреса, а Андрей - перезаписывал значение словаря, и еще и preserve использовал.
Используя гибрид наших подходов- можно еще немного ускорить код.
Создал еще две процедуры:
Slavick_ArrayAndDic2 - гибрид со словарем
Slavick_ArrayAndString - гибрид со СТРИНГом
Результаты:
[vba]
Код
Slavick 0,4219
Mikael 0,5313
bmv98rus 0,8242
Karataev 0,4219
ArrayUnion 0,1602
Slavick_ArrayAndDic 0,0391
Мяу 0,0859
Slavick_ArrayAndDic2 0,0234
Slavick_ArrayAndString 0,0273
[/vba]
Slavick_ArrayAndString - подойдет и для МАСа, поскольку там нет словаря. :D .
[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
[/vba]
К сообщению приложен файл: 6772261.xlsm (75.6 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Это единственный макрос с не отключенным пересчетом.

а слона то я и не заметил :) .
В файле TestHideRows2.xlsm на Лист1 Slavick стопорит на строке

да - там проверку нужно сделать на RH.
вместо строки:
[vba]
Код
RH.EntireRow.Hidden = True
[/vba]
нужно
[vba]
Код
If Not RH Is Nothing Then RH.EntireRow.Hidden = True
[/vba]
Для огрызка пущай он пишет

lol lol .
Кстати только заметил, что мы с RAN, практически одинаковым способом решали задачу только я сразу прятал строки, при достижении длины строки адреса, а Андрей - перезаписывал значение словаря, и еще и preserve использовал.
Используя гибрид наших подходов- можно еще немного ускорить код.
Создал еще две процедуры:
Slavick_ArrayAndDic2 - гибрид со словарем
Slavick_ArrayAndString - гибрид со СТРИНГом
Результаты:
[vba]
Код
Slavick 0,4219
Mikael 0,5313
bmv98rus 0,8242
Karataev 0,4219
ArrayUnion 0,1602
Slavick_ArrayAndDic 0,0391
Мяу 0,0859
Slavick_ArrayAndDic2 0,0234
Slavick_ArrayAndString 0,0273
[/vba]
Slavick_ArrayAndString - подойдет и для МАСа, поскольку там нет словаря. :D .
[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
[/vba]

Автор - SLAVICK
Дата добавления - 22.01.2018 в 10:53
bmv98rus Дата: Понедельник, 22.01.2018, 12:44 | Сообщение № 34
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop] SLAVICK, RAN, Mikael, Karataev, Одно могу сказать, если б так вылизывался каждый код, то конечно половина программ еще б не функционировала, но те что были написана и пользователю предложены - летали б и не грели процессор по чем зря. Респект вам за желание добиться максимального результата.[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop] SLAVICK, RAN, Mikael, Karataev, Одно могу сказать, если б так вылизывался каждый код, то конечно половина программ еще б не функционировала, но те что были написана и пользователю предложены - летали б и не грели процессор по чем зря. Респект вам за желание добиться максимального результата.[/offtop]

Автор - bmv98rus
Дата добавления - 22.01.2018 в 12:44
Fencer Дата: Среда, 07.03.2018, 19:31 | Сообщение № 35
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Внедрил оптимизированные код (Slavick_ArrayAndDic) в программу и активно теперь ей пользуются. Все отлично работает, но иногда в некоторых файлах код не работает, пишет "run-time error 5". Что то поделаешь в файле, заново значения введешь и код заработает, а бывает и нет.
Как бороться с этой ошибкой? Из-за чего она возникает?
 
Ответить
СообщениеВнедрил оптимизированные код (Slavick_ArrayAndDic) в программу и активно теперь ей пользуются. Все отлично работает, но иногда в некоторых файлах код не работает, пишет "run-time error 5". Что то поделаешь в файле, заново значения введешь и код заработает, а бывает и нет.
Как бороться с этой ошибкой? Из-за чего она возникает?

Автор - Fencer
Дата добавления - 07.03.2018 в 19:31
InExSu Дата: Среда, 14.03.2018, 00:09 | Сообщение № 36
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!
"run-time error 5"

На какой строчке кода?


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеПривет!
"run-time error 5"

На какой строчке кода?

Автор - InExSu
Дата добавления - 14.03.2018 в 00:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оптимизация кода макроса по скрытию строк (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!