A B C D
1 1 2 1 005
2 2 4 2 005
3 3 6 3 005
4 4 8 4 005
5 5 10 5 005
我想将工作表中的数据(" A")复制到工作表(" B"),C列和D列是文本格式。
如果我使用以下代码,则存在所有数据都是值格式的问题,例如结果如下:
Worksheets("B").Range("A1:D5").Value = Worksheets("A").Range("A1:D5").Value
或者
Worksheets("A").Activate
Range(Cells(1, 1), Cells(5, 4)).Copy Destination:=Worksheets("B").Cells(1, 1)
-
A B C D
1 1 2 1 5
2 2 4 2 5
3 3 6 3 5
4 4 8 4 5
5 5 10 5 5
如果我使用下面的代码可以获得我想要的结果。我想问其他更快的方法来实现想要的结果吗?
Worksheets("A").Activate
Range(Cells(1, 1), Cells(5, 4)).Copy
Worksheets("B").Cells(1, 1).PasteSpecial xlPasteValues
以下结果是我想要的工作表(" B")。
A B C D
1 1 2 1 005
2 2 4 2 005
3 3 6 3 005
4 4 8 4 005
5 5 10 5 005
另一个问题是为什么以下代码会出错?
Worksheets("B").Range(Cells(1, 1), Cells(5,4)).Value = Worksheets("A").Range(Cells(1, 1), Cells(5,4)).Value
谢谢!
答案 0 :(得分:0)
对于第一个问题,没有比使用xlPasteValues
使用pastespecial更快的方法。
另一种方法是将目标单元格的格式更改为文本,然后执行普通复制。在这种情况下,Vba不会做任何事情,而不是用户可以手动做的事情。即使您手动执行此操作,也无法将数据复制到具有不同格式的其他工作表,并且希望保持不变。你必须使用 pastespecial - >仅粘贴值。
这同样适用于Vba。
对于问题的第二部分,
Worksheets("B").Range(Cells(1, 1), Cells(5,4)).Value = _
Worksheets("A").Range(Cells(1, 1), Cells(5,4)).Value
你的问题在于范围功能。 Cells(1,1)返回Cell(1,1)的值而不是地址。范围需要单元格地址才能工作,这会造成麻烦。
答案 1 :(得分:0)
我认为这是复制和粘贴的最佳解决方案。正如您所知,您不能简单地复制值,因为格式不同。使用PasteSpecial
,您可以先粘贴格式,然后粘贴值:
With Worksheets("A")
.Range(.Cells(1, 1), .Cells(5, 4)).Copy
End With
With Worksheets("B").
.Cells(1, 1).PasteSpecial Paste:=xlPasteFormats
.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
End With
您收到错误的另一个问题:
您需要在范围内的单元格之前添加工作表:
Worksheets("B").Range(Worksheets("B").Cells(1, 1), Worksheets("B").Cells(5, 4)).Value = Worksheets("A").Range(Worksheets("A").Cells(1, 1), Worksheets("A").Cells(5, 4)).Value