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等) 。)。如果我将方法更改为" COPY",它运行正常(H2,H3,H4等)。
注意:我可以使用' COPY'或其他一些解决方法。但真的只是想知道为什么' CUT'表现得这样。
更新:抱歉,我已将代码更新为CUT而不是COPY。是的,我明白我需要在目标表中有一个标题行。我唯一的问题是为什么第二行永远不会从源表中删除(但是当我用COPY替换CUT时它工作正常)。
答案 0 :(得分:1)
这真的很有意思。我认为它可能是导致问题的for
循环(即Next cell
),但在测试中,结果也不是问题。我甚至把它放到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
我创建了一个范围,其中包含比原始行多一行,但是从同一点开始,现在是该范围的第二行。由于这有效,这让我相信在切割时,excel使用前一行来设置切割后当前行的指针。因为切割第一行时没有前一行,所以它会跳过,直到它能够这样做,这解释了为什么切割第一行没有返回所需的结果。
答案 1 :(得分:0)
我没有在你的代码中看到你要删除的行,所以我会假设你在复制之后也删除了这行。如果是这种情况,请注意当您删除行时,它下面的行会向上移动。这意味着如果cell.Row
= 12并删除第12行,则下一次迭代将查看第13行,即使第12行现在具有第13行的内容。
通常情况下,这个迭代会向后循环一个循环(For i = 1 to 10 Step - 1
)。However, you can't iterate backwards through a For Each
statement。
请改为尝试:
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