将一张纸上的变量范围复制到另一张纸上的下一个空行

时间:2016-01-23 21:15:44

标签: excel vba excel-vba

我需要复制P:Y列中的所有数据并将其粘贴到A列的下一个空白单元格中。

我已经编写了下面的代码,它工作正常,除了它复制的数据(P:Y)包含整个列的公式,虽然我粘贴值只是为了得到返回的值,它将所有单元格都计为包含数据。

我的意思是,当我第一次运行宏时,它可以工作。但是当我第二次运行它时(我需要这样做),当它找到最后一个空行时。这不是最后一排空行!它选择的行远远低于我可以看到数据的实际最后一行。

空行中没有数据,其中没有公式,但由于某种原因,我认为这些行不是空的。

公式列P:Y中返回的数据每个月都会更改,因此我无法定义特定范围。

如何修改代码以纠正这个问题 - 或者有更好的方法可以解决这个问题吗?

Sub SelectRangea()

   Sheets("Set Up Data").Select
   Range("P2:Y10000").Select
   Application.CutCopyMode = False
   Selection.Copy

With Sheets("Pasted Report")
   lst = .Range("A" & Rows.Count).End(xlUp).Row + 1
   .Range("A" & lst).PasteSpecial xlPasteColumnWidths
   .Range("A" & lst).PasteSpecial xlPasteValues

End With

End Sub

1 个答案:

答案 0 :(得分:2)

当单元格包含公式时,它将具有一个值,即使在检查工作表上的单元格时它看起来是空的。因此,如果你复制这些看似空的单元格并将它们粘贴到其他地方(即使只作为值),粘贴的单元格现在包含一些东西(即它们不再是空的;它们是一个空字符串准确而不是VBA的空。)

然后Range.End将移动到最后的空单元格,而不是移动到最后一个真正的填充单元格。

如果您在空白纸上手动执行此操作,您可以自己看到:输入A1:A5公式="",然后将范围作为值复制到B1:B5,然后选择B10并按Ctrl-Up。

修复将使用Range.End方法,然后只检查向上的单元格内容。或者使用Range.Find,但请记住,这也会改变用户“查找”对话框中的设置。