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

Вход

Регистрация

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

 

= Мир MS Excel/Скорость исполнения макроса - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Скорость исполнения макроса (Макросы/Sub)
Скорость исполнения макроса
Гордей Дата: Суббота, 23.03.2019, 04:12 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Намасте!

В файле-примере есть макрос, который моментально выполняется для нескольких десятков строк. Суть его проста - смещает некоторые пустые ячейки и перемещает некоторые данные.
Но если строк несколько тысяч - он задумывается надолго...

Как переделать данный макрос, чтобы и для множества строк он работал практически моментально?
К сообщению приложен файл: Test-File.xlsb (55.1 Kb)
 
Ответить
СообщениеНамасте!

В файле-примере есть макрос, который моментально выполняется для нескольких десятков строк. Суть его проста - смещает некоторые пустые ячейки и перемещает некоторые данные.
Но если строк несколько тысяч - он задумывается надолго...

Как переделать данный макрос, чтобы и для множества строк он работал практически моментально?

Автор - Гордей
Дата добавления - 23.03.2019 в 04:12
Anchoret Дата: Суббота, 23.03.2019, 19:51 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Все манипуляции с диапазонами - затратное по времени удовольствие. Изучайте массивы и методы работы с ними.
 
Ответить
СообщениеВсе манипуляции с диапазонами - затратное по времени удовольствие. Изучайте массивы и методы работы с ними.

Автор - Anchoret
Дата добавления - 23.03.2019 в 19:51
InExSu Дата: Воскресенье, 24.03.2019, 11:11 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!

Массивы, конечно прекрасны.

8 секунд без массивов.

Код не мой, я лишь частично рихтанул

К сообщению приложен файл: InExSu_Test-Fil.xlsb (97.2 Kb)


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac

Сообщение отредактировал InExSu - Воскресенье, 24.03.2019, 17:25
 
Ответить
СообщениеПривет!

Массивы, конечно прекрасны.

8 секунд без массивов.

Код не мой, я лишь частично рихтанул


Автор - InExSu
Дата добавления - 24.03.2019 в 11:11
_Boroda_ Дата: Воскресенье, 24.03.2019, 14:09 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
InExSu, уважайте других участников форума, если код не очень большой, выкладывайте его в теле поста


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеInExSu, уважайте других участников форума, если код не очень большой, выкладывайте его в теле поста

Автор - _Boroda_
Дата добавления - 24.03.2019 в 14:09
Гордей Дата: Воскресенье, 24.03.2019, 18:09 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
8 секунд без массивов.


На моём компьютере оригинал почти 7 секунд выполняется, а Ваш - 5 секунд с копейками.. Хотелось бы за секунду, но о массивах имею очень скудное понимание, как их создавать и применять..

Зато узнал про таймер, измеряющий скорость выполнения макросов) Спасибо Вам!
 
Ответить
Сообщение
8 секунд без массивов.


На моём компьютере оригинал почти 7 секунд выполняется, а Ваш - 5 секунд с копейками.. Хотелось бы за секунду, но о массивах имею очень скудное понимание, как их создавать и применять..

Зато узнал про таймер, измеряющий скорость выполнения макросов) Спасибо Вам!

Автор - Гордей
Дата добавления - 24.03.2019 в 18:09
Glen Дата: Понедельник, 25.03.2019, 08:55 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 10 ±
Замечаний: 0% ±

Excel 2010-16
Так?
К сообщению приложен файл: 7513023.xlsb (93.6 Kb)


Пехаль киндриков куравь, пехаль киндриков лузнись.
 
Ответить
СообщениеТак?

Автор - Glen
Дата добавления - 25.03.2019 в 08:55
китин Дата: Понедельник, 25.03.2019, 09:06 | Сообщение № 7
Группа: Модераторы
Ранг: Экселист
Сообщений: 7014
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Glen,
уважайте других участников форума, если код не очень большой, выкладывайте его в теле поста


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
СообщениеGlen,
уважайте других участников форума, если код не очень большой, выкладывайте его в теле поста

Автор - китин
Дата добавления - 25.03.2019 в 09:06
Glen Дата: Понедельник, 25.03.2019, 09:08 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 10 ±
Замечаний: 0% ±

Excel 2010-16
:))
[vba]
Код
Sub Nb()
t = Timer
    Application.ScreenUpdating = 0
    Application.DisplayStatusBar = 0
    vData = Range("A2:J" & [J65000].End(xlUp).Row).Value
    ReDim vDop(1 To UBound(vData, 1), 1 To UBound(vData, 2))
    r0 = 0
    For rrr = 1 To UBound(vData, 1)
        If Len(vData(rrr, 1)) + Len(vData(rrr, 2)) > 0 Then
            r0 = r0 + 1
            For ccc = 1 To UBound(vData, 2)
            vDop(r0, ccc) = vData(rrr, ccc)
            Next ccc
        End If
    Next rrr
    Sheets("ИТОГ").Select
    Sheets("ИТОГ").Range("B3").Resize(UBound(vDop, 1) + 10000, UBound(vDop, 2)).ClearContents
    Sheets("ИТОГ").Range("B3").Resize(UBound(vDop, 1), UBound(vDop, 2)).Value = vDop
    Application.ScreenUpdating = 1
    Application.DisplayStatusBar = 1
MsgBox Timer - t
End Sub
[/vba]


Пехаль киндриков куравь, пехаль киндриков лузнись.

Сообщение отредактировал Glen - Понедельник, 25.03.2019, 09:08
 
Ответить
Сообщение:))
[vba]
Код
Sub Nb()
t = Timer
    Application.ScreenUpdating = 0
    Application.DisplayStatusBar = 0
    vData = Range("A2:J" & [J65000].End(xlUp).Row).Value
    ReDim vDop(1 To UBound(vData, 1), 1 To UBound(vData, 2))
    r0 = 0
    For rrr = 1 To UBound(vData, 1)
        If Len(vData(rrr, 1)) + Len(vData(rrr, 2)) > 0 Then
            r0 = r0 + 1
            For ccc = 1 To UBound(vData, 2)
            vDop(r0, ccc) = vData(rrr, ccc)
            Next ccc
        End If
    Next rrr
    Sheets("ИТОГ").Select
    Sheets("ИТОГ").Range("B3").Resize(UBound(vDop, 1) + 10000, UBound(vDop, 2)).ClearContents
    Sheets("ИТОГ").Range("B3").Resize(UBound(vDop, 1), UBound(vDop, 2)).Value = vDop
    Application.ScreenUpdating = 1
    Application.DisplayStatusBar = 1
MsgBox Timer - t
End Sub
[/vba]

Автор - Glen
Дата добавления - 25.03.2019 в 09:08
китин Дата: Понедельник, 25.03.2019, 09:13 | Сообщение № 9
Группа: Модераторы
Ранг: Экселист
Сообщений: 7014
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Glen, hands hands hands


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
СообщениеGlen, hands hands hands

Автор - китин
Дата добавления - 25.03.2019 в 09:13
Гордей Дата: Понедельник, 25.03.2019, 17:03 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007


Вау, Glen... Невероятно! Моментальная скорость) Ваш способ без использования массива?

И подскажите пожалуйста, что в этой строчке

[vba]
Код
Sheets("ИТОГ").Range("B3").Resize(UBound(vDop, 1) + 10000, UBound(vDop, 2)).ClearContents
[/vba]

значат +10000?

СПАСИБО!!!

upd: извиняюсь, поправил!


Сообщение отредактировал Гордей - Понедельник, 25.03.2019, 17:14
 
Ответить
Сообщение

Вау, Glen... Невероятно! Моментальная скорость) Ваш способ без использования массива?

И подскажите пожалуйста, что в этой строчке

[vba]
Код
Sheets("ИТОГ").Range("B3").Resize(UBound(vDop, 1) + 10000, UBound(vDop, 2)).ClearContents
[/vba]

значат +10000?

СПАСИБО!!!

upd: извиняюсь, поправил!

Автор - Гордей
Дата добавления - 25.03.2019 в 17:03
_Boroda_ Дата: Понедельник, 25.03.2019, 17:05 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)

Автор - _Boroda_
Дата добавления - 25.03.2019 в 17:05
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Скорость исполнения макроса (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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