Страницы: 1
RSS
Ускорение копирования данных из другой книги
 
Доброго времени суток, люди добрые!

Может, кто-то подскажет, как лучше решить такую маленькую проблемку.

Есть книга, в которую вставляются отдельные данные из других открываемых книг посредством нехитрого цикла прямого копирование (ниже).
Однако со временем этих циклов стало очень много, а код стал исполняться несколько десятков минут (циклов таких - многие сотни).
Появилась мысль о замене цикла прямого копирования на работу с массивами, т.е. сначала данные в массив считать, а потом разом вставить в нужное место.

НО не могу оценить, стоит ли игра свеч, ускорит ли это копирование данных (дабы впустую не переписывать тысячи строк макросов). Отсюда вопрос - имеет ли смысл переходить на работы в циклах с массивами? Имеет ли это хотя бы в теории выигрыш по времени не менее -30%? И если да, то как можно наилучшим способом трансформировать мой пример, чтобы он в теории стал работать быстрее?

Заранее премного благодарен!
Код
For j = 1 To 13
    For i = 7 To 36
        rowPL = ThisWorkbook.Worksheets("Лист").Cells(i, 2).Value
        With mySheetsPL(j)
            ThisWorkbook.Worksheets("Лист").Cells(i, j + 5).Value = .Cells(rowPL, dCol).Value 'видимо, именно эта строка занимает наибольшее время, т.к. копируется значение каждой ячейки отдельно и последовательно
        End With
    Next i
Next j
 
AlexTM,
https://habr.com/ru/post/158725/
https://www.excel-vba.ru/chto-umeet-excel/kak-uskorit-i-optimizirovat-kod-vba/
Не бойтесь совершенства. Вам его не достичь.
 
Mershik,

да, спасибо, видел я все это, иначе бы не стал занимать время..  :)

Исходя из прочитанного не ясна разница. Поскольку я использую вроде быстрый цикл For-Next, а также коснтрукцию With, которая в теории также дает уменьшение времени, если не ошибаюсь.
От того и вопрос именно к опыту форумчан - массивы суть более кардинальное решение, или же они дают 5-10% экономии ресурсов в данной конструкции. Ежели так, то мне этот вариант не подойдет, буду искать другие решения..
 
AlexTM, здравствуйте!
По фрагменту кода предполагаю, что у вас выполняется вставка по одной ячейке. Если это так, то использование массивов со вставкой блоками способно многократно (в стони и тысячи раз) ускорить этот процесс при правильном подходе

Пока вопрос слишком теоретический (оторван от реального примера): так, например, если вам нужно собрать данные с сотни книг и вставить всё на один лист, то 100% быстрее будет "копить" таблицу в массивах (в памяти) и потом выгрузить на лист в одно действие
Изменено: Jack Famous - 26.06.2020 22:35:56
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
На каждом шаге первого цикла Вы 29 раз лезете на лист за одними и теми же значениями. Почему не взять их сразу в массив, тем более что они в столбце и тут даже не нужен цикл по ячейкам?
Страницы: 1
Наверх