VBA切入范围跳过第二排

For Each cell In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) cell.EntireRow.Cut Workbooks("Book2.xlsx").Worksheets("Sheet1").Cells(Rows.Count,1).End(xlUp).Offset(1, 0) Next cell 

得到快速的问题。 这段代码循环遍历一个范围,并将整行剪切/粘贴到另一个工作簿/工作表上。

但是,它成功剪切/粘贴第一行。 然后跳过第二行。 然后继续按预期切割/粘贴每一行(事实上,如果我设置了一个断点,你可以看到它打到第一行,跳过第二行,然后运行正常,并击中所有其他(H2,H4,H5等)。 )如果我改变方法为“复制”,它运行正常(H2,H3,H4等)。

注意:我可以使用“复制”或其他解决方法。 但真的只是想知道为什么“CUT”这样的行为。

更新:对不起,我已经更新代码到CUT而不是COPY。 而且,我明白,我需要目标表中的标题行。 我唯一的问题是为什么第二行永远不会从源表中剪切(但是,当我用COPYreplaceCUT时,它工作得很好)。

这真的是一个有趣的。 我认为这可能是导致问题(即Next cell )的for循环,但在testing中,结果也不是问题。 我甚至把它放到一个do while循环中,得到了相同的结果。 最后的手段(应该是第一个度假村:)),我去了MDSN看看他们对Cut的看法。 这里是关键的句子

切割范围必须由相邻的单元组成。

虽然我认为你的代码符合这个条件,但是“相邻单元格”语句让我想到了……是不是跳过了,因为你正在切割范围中的第一行,范围内没有以前的行/单元格? 沿着这些线路,我试过这个代码,它的工作原理,仍然利用.Cut

 Set myRange = Worksheets("Sheet1").Range("A1:A" & _ Worksheets("Sheet1").Cells(Worksheets("Sheet1").Rows.Count, 1).End(xlUp).Row) i = 2 Do While i <= myRange.Rows.Count myRange.Cells(i, 1).EntireRow.Cut _ Worksheets("Sheet2").Cells(Worksheets("Sheet2"). _ Rows.Count, 1).End(xlUp).Offset(1, 0) i = i + 1 Loop 

我创build了一个范围,其中包括比原来多一行,但是从同一点开始,现在是范围的第二行。 由于这个工作,这导致我相信,当切割时,Excel正在使用前一行设置切割后的当前行的指针。 因为在剪切第一行时没有上一行,所以它会跳过,直到它能够这样做,解释为什么剪切第一行没有返回所需的结果。

我没有在你的代码中看到你正在切割的行,所以我会假设你也在复制之后删除行。 如果是这种情况,请注意当你删除一行时,它下面的行会向上移动。 这意味着如果cell.Row = 12并且删除了第12行,则即使第12行现在具有第13行的内容,下一次迭代也将查看第13行。

通常情况下,这个迭代向后循环( For i = 1 to 10 Step - 1 )。 但是,不能通过For Each语句向后迭代 。

试试这个:

 For i = 2 to Cells(Rows.count, 1).End(xlUp).Row Step - 1 'Put your code here 'Tip: use Cells(i,"H") to reference each cell in column H Next i 

我的问题是,你为什么不一次读取/写入范围内的所有内容? 如果需要复制该范围内的每一行,为什么不一次性复制/粘贴所有内容?

 Dim Rng as Range Set Rng = Range("H2:N" & Cells(Rows.count, 1).End(xlUp).Row) 'Note I changed the second column reference. Modify this to whichever is the last column in your range. Rng.copy Workbooks("Blank1.xlsx").Worksheets("Sheet1").Cells(Rows.count, 1).End(xlUp).Offset(1, 0) Rng.Clear