Excel VBA 对于 select 列中的所有内容,包括空白

Excel VBA for select everything in a column, including blanks

我想做的是将一整列从 sheet 复制到另一列。结果我只得到第一行,结果如下:

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

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

.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 是关于这个主题的一些很好的读物。

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

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 属性 returns 您在单元格中看到的内容。如果有公式,只需将 .Value 替换为 .Formula.