我有两位代码。首先从单元格A到单元格B的标准复制粘贴
Sheets(sheet_).Cells(x, 1).Copy Destination:=Sheets("Output").Cells(startrow, 2)
我可以使用几乎相同的方法
Sheets("Output").Cells(startrow, 2) = Sheets(sheet_).Cells(x, 1)
现在,第二种方法要快得多,无需复制到剪贴板并再次粘贴。但是,它不会像第一种方法那样跨格式复制。第二种方法几乎可以立即复制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
是否可以在VBA中使用RTF字符串,还是只能在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
旧代码= 1296msec
'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
最佳答案
对我来说,你不能。但是,如果满足您的需要,则可以一次复制整个范围,而无需循环运行,从而可以提高速度和格式化速度:
range("B2:B5002").Copy Destination:=Sheets("Output").Cells(startrow, 2)
而且,顺便说一句,您可以构建自定义范围字符串,例如
Range("B2:B4, B6, B11:B18")
编辑:如果您的源是“稀疏”,那么复制完成后是否可以立即格式化目标?