Excel VBA用于选择列中的所有内容,包括空白

时间:2018-07-19 22:30:35

标签: excel vba copy-paste

我要做的是将一整列从一张纸复制到另一张纸。结果,我只得到第一行,如下所示:

Sheets("z_raw").Select
Range("A2").End(xlDown).Select
Selection.SpecialCells(xlCellTypeVisible).Copy
Sheets("raw").Select
Range("b2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

第一行包含无法更改的标题。任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

.SpecialCells(xlCellTypeVisible)仅会给您可见的单元格。如果您想复制整列,而不是尝试使用Range("A2").End(xlDown)仅查找已使用的区域,则可以执行以下操作:

Sheets("z_raw").Range("A:A").Copy
Sheets("raw").Range("B:B").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

请记住,使用select等通常被认为是危险的。 This是该主题的不错读物。

您在评论中提到,您希望保留的列中有标题(我假设在目标列中)。为此,只需将第一个单元格的值保存在列中(或标题所在的位置),然后在粘贴后替换这些值。

Dim header As String
Sheets("z_raw").Range("A:A").Copy
header = Sheets("raw").Range("B1").Value
Sheets("raw").Range("B:B").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("raw").Range("B1").Value = header

请记住,如果B1中有任何公式,则粘贴后将不会转移它们。 .Value属性返回您在单元格中看到的内容。如果有公式,只需将.Value替换为.Formula