Страницы: 1
RSS
Ускорить копирование/сложения диапазонов, расположенных на разных страницах
 
Прошу не ругать новичка за, вероятно, простейший вопрос)

Код, указанный ниже, копирует диапазон с одной страницы и прибавляет его данные к диапазону на другой странице. Макрос работает долго (40000 строк в отчете), подозреваю, что это происходит из-за того, что макрос прыгает по страницам. Application.ScreenUpdating уже использую. Можно ли переписать макрос так, чтобы он не выделял данные на соседних страницах, а просто их копировал?
Код
        Sheets("Ассортимент").Select
        Range(Cells(i, 8, Cells(i, 237)).Select
        Selection.Copy
        Sheets("Шахматка").Select
        Cells(LastRow + 1, 5).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
            :=False, Transpose:=False
Буду признателен за любой совет.
 
небольшой файл-пример бы от вас и подробнее что куда копировать/добавлять
Изменено: New - 18.10.2021 14:02:29
 
Совет:
- загрузить данные в массив и забыть о листе-источнике;
- на время забыть о листе для загрузки - обработать данные в массиве;
- выгрузить обработку  на лист
 
vikttur, на листе-источнике копируется 300 столбцов и они прибавляются в нужные столбцы на лист для загрузки. Опасаюсь, что это перегрузит память ПК.
И, если честно - с массивами слабо дружу, может быть подскажете как скопировать в массив данные с 8 по 308 столбец со страницы Динамика и прибавить их к данным в столбцах 5 - 305 на странице Шахматка?

New, файла с примером нет, может быть поможет такое уточнение? На странице Динамика есть числовые данные в столбцах с 8-го по 308-ий. Они прибавляются к данным в столбцах с 5-го по 305-ый на странице Шахматка. Данные именно прибавляются - поэтому я использую код со специальной вставкой (взял из макрекордера).
 
ну, у меня такой код выполняется быстро

Код
Sub test()
Dim Rng As Range
    
    With Sheets("Динамика")
        Set Rng = .Range(.Cells(1, 8), .Cells(100, 237))
    End With
    Rng.Copy
    Sheets("Шахматка").Cells(1, 5).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd
    Set Rng = Nothing
End Sub
 
New, спасибо за совет, наверняка with ускорит процесс и ScreenUpdating не понадобится. Потестирую, но уже завтра. если нужно - о результатах сообщу.
 
Цитата
VIZ_VIZ написал:
наверняка with ускорит процесс
с чего бы это? Все, что ускоряет With - это написание кода при обращении к объекту. Так что для оптимизации времени выполнения это вообще никакой роли не сыграет.
Роль сыграет отсутствие Select-ов. Впрочем, об этом говорилось не раз. Может Вам имеет смысл ознакомиться со статьями на тему?
Select и Activate - зачем нужны и нужны ли?
Как ускорить и оптимизировать код VBA
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх