快速复制excel格式的方法

Dev*_*WAH 12 format vba rtf copy

我有两位代码.首先是从细胞A到细胞B的标准复制糊

Sheets(sheet_).Cells(x, 1).Copy Destination:=Sheets("Output").Cells(startrow, 2)
Run Code Online (Sandbox Code Playgroud)

我可以做几乎相同的使用

Sheets("Output").Cells(startrow, 2) = Sheets(sheet_).Cells(x, 1)
Run Code Online (Sandbox Code Playgroud)

现在第二种方法要快得多,避免复制到剪贴板并再次粘贴.但是,它不会像第一种方法那样复制格式.第二个版本几乎可以立即复制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
Run Code Online (Sandbox Code Playgroud)

是否可以在VBA中使用RTF字符串,或者只能在vb.net等中使用.

答案*

只是为了看看我的origianl方法和新方法如何比较,这里是结果或之前和之后

新代码= 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
Run Code Online (Sandbox Code Playgroud)

旧代码= 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
Run Code Online (Sandbox Code Playgroud)

小智 15

你可以简单地使用Range("x1").value(11) 下面的东西:

Sheets("Output").Range("$A$1:$A$500").value(11) =  Sheets(sheet_).Range("$A$1:$A$500").value(11)
Run Code Online (Sandbox Code Playgroud)

range具有默认属性"Value"加值可以有3个可选的参数10,11,12.11是你需要同时改变价值和格式.它不使用剪贴板,所以它更快.- Durgesh


Pat*_*rez 6

对我来说,你做不到.但如果这符合您的需求,您可以通过立即复制整个范围来获得速度格式,而不是循环:

range("B2:B5002").Copy Destination:=Sheets("Output").Cells(startrow, 2)
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你可以建立一个自定义范围字符串,比如 Range("B2:B4, B6, B11:B18")


编辑:如果您的来源是"稀疏的",那么您是否只能在复制完成时立即格式化目的地?