快速回答:
使用 Worksheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial SkipBlanks = False
来自MSDN的参考:
SkipBlanks True表示剪贴板范围内的空白单元格不会粘贴到目标范围内 . 默认值为False .
但是,使用 Select 不被视为良好做法 . 考虑阅读this以获取更多信息 . 对于复制粘贴范围,我不能推荐更多Chip Pearson's page .
演示:
Sub test()
Dim LastRow As Long Dim arCopy() As Variant
Dim rDest As Range
With Sheet2 ' --> Qualify the ranges
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 End With
arCopy = Sheet1.Range("A2:K2").Value
Set rDest = Sheet2.Cells(LastRow, "A")
Set rDest = rDest.Resize(1, UBound(arCopy, 2))
rDest.Value = arCopy
End Sub
工作表Sheet1:
Sheet2之前:
Sheet2之后:
上面有一个额外的好处,你不必担心空单元格,因为它们是默认复制的 .
我希望这有帮助!
EDIT (解决评论)
确实,自 SkipBlanks = False 默认情况下, PasteSpecial 不会跳过空白 . 你确定你的细胞确实是空白的并且看起来不是空白的吗?您可以使用 ISBLANK() 功能快速检查 . 如果 SkipBlanks 似乎只运行了一些时间,那么它应用的单元格肯定会有所不同 .
With ... End With :这是一种增强可读性的快捷方式构造 . 基本上,一组方法或属性在同一个对象下,例如
Sheet1.Range("A1")="Rob"
Sheet1.Copy("A2")
Sheet1.Rows.Count
可写成
With Sheet1
.Range("A1") = "Rob"
.Copy("A2")
.Rows.Count
End With
这增强了可读性
你的第二个建议
我们可以为例如指定一些值吗?对于那些空白单元格为NULL或0,以便新响应可以存储在新行中 .
原则上,这是可能的 . 但是,您应该确定哪些单元格是"blank",并且我们已经知道一个不跳过空白的方法似乎不起作用,因此识别空白单元格并替换它们是一个问题22.换句话说,如果我们知道如何找到这些"blank"单元格,以便我们将它们分配为NULL或0,然后 SkipBlanks 将以更优雅的方式处理它们(因为它的目的就是这样做) .