Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2017, 06:26   #1
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию Как оптимизировать макрос

Добрый день!
Подскажите, пожалуйста, как оптимизировать макрос? Записей в таблице много, работает очень медленно.
Код:
Sub Макрос1()
Dim W1 As Workbook
Set W1 = Application.Workbooks("11.xlsm")
    Dim i, j, iLastrow As Long, iLastcol As Long

W1.Activate
With W1.Sheets(1)
  iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
 iLastcol = Cells(2, Columns.Count).End(xlToLeft).Column
For i = 2 To iLastrow
For j = 7 To iLastcol Step 3
   Cells(i, j).FormulaR1C1 = "=RC[-1]-RC[-2]"
 Next
Next
End With
End Sub

Последний раз редактировалось Arigato; 25.01.2017 в 11:23.
evdss вне форума Ответить с цитированием
Старый 25.01.2017, 06:48   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

1. отключить на время обновление формул/перерисовку экрана
2. заполнить формулами 7 столбец
3. копировать/вставлять столбец формул п.2 до iLastCol Step 3
4. включить п.1
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 25.01.2017, 11:17   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Лучше всего, сначала определить диапазон для вставки формул, а затем их вставить.
Например, так:
Код:
Sub qq()
    Dim i As Long, a As Long, b As Long, x As Range
    Application.ScreenUpdating = False
    Workbooks("11.xlsm").Sheets(1).Activate
    a = Cells(Rows.Count, 1).End(xlUp).Row
    b = Cells(2, Columns.Count).End(xlToLeft).Column
    For i = 7 To b Step 3
        If x Is Nothing Then Set x = Cells(1, i) Else Set x = Union(x, Cells(1, i))
    Next
    Intersect(Rows("2:" & a), x.EntireColumn).FormulaR1C1 = "=RC[-1]-RC[-2]"
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 25.01.2017 в 11:22.
SAS888 вне форума Ответить с цитированием
Старый 26.01.2017, 09:29   #4
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию

Спасибо большое, работает очень быстро.
evdss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оптимизировать макрос Kek Microsoft Office Excel 7 31.07.2013 13:29
оптимизировать макрос Kek Microsoft Office Excel 2 29.06.2013 17:54
Возможно ли оптимизировать макрос Vadim39 Microsoft Office Word 9 21.05.2013 09:35
Как оптимизировать? А)-(дрей Microsoft Office Excel 31 12.04.2011 21:38
Помогите оптимизировать макрос kipish_lp Microsoft Office Excel 20 27.07.2010 10:48