Excel / VBA如何在上次使用单元格之后将数据从一个工作表移动到另一个工作表?

我有一个工作簿9个不同的工作表,其中1张如果其中4张合并为1张进行进一步比较,从复制和粘贴的angular度来看很容易,但从自动化的angular度来看,行的长度可以根据数据增加和减less。

我需要A页在A,B,C栏的左边第一页复印,然后在B页面之后插入B页面,B页面直接插在A页面的下面。 表C和D类似,但是在H,I,J列前两张的右侧,因此可以比较

我试图聪明地在每张纸上运行多个for循环,将数据复制到这张工作表上,A&B共享一个全局variables,C&D持有另一个,所以他们进入了正确的位置。 我遇到的问题是运行时间很长,主要是在excel上崩溃。

我也尝试复制粘贴所有的列,但没有工作,因为他们的长度不同,所以不能被logging。

我终于试图设置一个行计数器作为上一张工作表的最后一个使用的行,但也导致崩溃。

Sheets("Income").Select Dim xell As Range For Each xell In Range("A1:A3005") If Not xell.Value = "" Then xell.EntireRow.Copy Sheets("Workings").Select Cells(z, "A").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=True, Transpose:=False Sheets("Income").Select z = z + 1 End If Next xell 

这是我第一次尝试与其他床单代码相似的例子,任何人都知道如何将4张工作表复制到1所需的目的地>?

有些事情:

首先,停止使用Sheets()。select。 没有必要,只会疯狂地闪烁。 您可以安全地使用工作表(“工作”)。单元格(…)来引用工作表上的单元格。

其次,Cells()只接受整数作为参数,而不是“A”。 至多,这将被转换为65(ASCII)这是你的情况是错误的。 使用单元格(z,1)而不是单元格(z,“A”)。

第三,z需要从1开始,而不是0。你没有初始化任何地方,所以它将从0开始,这会崩溃。

你可以试试这个:

 Sub CopyIt() allSheets = Array(Array(sheets("A"), sheets("B")), Array(sheets("C"), sheets("D"))) Set destSheet = sheets("Dest") Set startRange = destSheet.Range("A1") For Each doubleSheet In allSheets For Each srcSheet In doubleSheet Set firstEmpty = srcSheet.Columns(1).Find("") If Not firstEmpty Is Nothing Then RowCount = srcSheet.Columns(1).Find("").Row - 1 Range(srcSheet.Cells(1, 1), srcSheet.Cells(RowCount, 3)).Copy Destination:=startRange Set startRange = startRange.Offset(RowCount, 0) End If Next Set startRange = destSheet.Range("H1") Next End Sub