Имеется книга весом порядка 30 мб. Нужно собрать на листе "Пресс n=3" данные из порядка 37 000 ячеек для дальнейшего анализа, собираю по заранее залитому фону. Ячейки из которых ведётся сбор идут в строго определённом порядке. D8, D18, D28 После запуска надстройки PLEX в заголовке окна отображается "Сборка данных с листов книги (Не отвечает). Курсор в виде часов.
Есть ли смысл ждать окончания или Excel подвис окончательно? Как это узнать, может стоит подождать и сборка закончится через некоторое время? Ждал более 30 минут, потом надоело.
В настройках включил задействовать все процессоры для вычисления. В диспетчере загрузка процессора 18%, озу 200 мб. Файл сохранён в xlbs.
Компьютер относительно мощный i7, 16gb озу.
1) Как ещё можно ускорить работу экселя? 2) Чтобы не использовать подвисающий Plex нужно писать макрос для сбора?
TheBestOfTheBest, пока только пробовал собрать при помощи Plex. Если её запустить для сбора 370000 (приблизительно) значений в заголовке окна отображается "Сборка данных с листов книги (Не отвечает). Курсор в виде часов. Ждал около получаса, надоело. Снял задачу через диспетчер.
kolevchuk, Если вы собираете просто значения из указанных ячеек, то можно сделать это достаточно просто, без пометок цветом и прочими. Если у вас расчитывается по указанным формулам для 37000 , то уж =INDEX('Пресс n=3'!D:D;(ROW()-1)*10+8) точно справится. Это просто формула листа в ячейке первой строки и далее, кооторая берет с шагом 10 начиная с 8.
kolevchuk, именно копировать, т.е. с форматами и пр.?
Код
Sub Копировать()
Dim i&, n&, a&
n = Sheets(1).UsedRange.Rows.Count 'измените название или индекс листа на нужный, название (имя) в кавычках
a = 2 'начальный номер строки на другом листе, куда вставляем отобранные данные
For i = 8 To n Step 10
Sheets(2).Range("A" & a).Value = Sheets(1).Cells(i, 4).Value 'переносим только значения
'Sheets(1).Cells(i, 4).Copy Sheets(2).Range("A" & a) 'полное копирование ячеек
a = a + 1
Next i
End Sub
Sub Копирова()
Dim i&, n&, a&
n = Val(InputBox("Сколько раз копировать? n ="))
Sheets("Пресс n=3").UsedRange.Rows.Count
a = 2
For i = 1 To n
Sheets("Итоги").Range("A" & a).Value = Sheets("Пресс n=3").Cells(8 + (i - 1) * 10, 4).Value
a = a + 1
Next i
End Sub
'Sub Копировать()
'Dim i&, n&
'n = Val(InputBox("n ="))
'For i = 1 To n
'Cells(i, 8) = Cells(8 + (i - 1) * 10, 4)
'Next i
'End Sub
kolevchuk, переменная "n" за что у Вас отвечает, ну или как Вам кажется за что она отвечает? В моем примере в нее помещался номер последней используемой строки на листе с индексом 1.