У меня есть два бита кода. Сначала стандартный скопируйте и вставьте из ячейки A в ячейку B
Sheets(sheet_).Cells(x, 1).Copy Destination:=Sheets("Output").Cells(startrow, 2)
Я могу сделать почти то же самое, используя
Sheets("Output").Cells(startrow, 2) = Sheets(sheet_).Cells(x, 1)
Теперь этот второй метод намного быстрее, избегайте g копирование в буфер обмена и повторная вставка. Однако он не копирует форматирование, как это делает первый метод. Вторая версия почти мгновенно копирует 500 строк, в то время как первый метод добавляет ко времени около 5 секунд. И окончательная версия может содержать до 5000 ячеек.
Итак, мой вопрос, можно ли изменить вторую строку, чтобы включить форматирование ячеек (в основном, цвет шрифта), оставаясь при этом быстрым.
В идеале я хотел бы иметь возможность копировать значения ячеек в массив / список вместе с форматированием шрифтов, чтобы я мог выполнять дальнейшую сортировку и операции с ними, прежде чем я «вставлю» их обратно на рабочий лист ..
Итак, моим идеальным решением было бы что-то вроде
for x = 0 to 5000
array(x) = Sheets(sheet_).Cells(x, 1) 'including formatting
next
for x = 0 to 5000
Sheets("Output").Cells(x, 1)
next
, можно ли использовать строки RTF в VBA или это возможно только в vb.net и т. Д.
Ответ *
Просто чтобы посмотреть, как мои Исходный метод и сравнение нового метода, вот результаты или до и после
Новый код = 65 мс
Sheets("Output").Cells(startrow, 2) = Sheets(sheet_).Cells(x, 1)
Sheets("Output").Range("B" & startrow).Font.ColorIndex = Sheets(sheet_).Range("A" & x).Font.ColorIndex 'copy font colour as well
Старый код = 1296 мс
'Sheets("Output").Cells(startrow, 2).Value = Sheets(sheet_).Cells(x, 1)
'Sheets(sheet_).Cells(x, 1).Copy
'Sheets("Output").Cells(startrow, 2).PasteSpecial (xlPasteFormats)
'Application.CutCopyMode = False