当有超过65536行时,查找最后一行

ws1.Cells(1, i).Copy ws2.Range("a65536").End(xlUp).Offset(1, 0) 

我正在循环表单,所以是循环的一部分。 行数超过65536,那我该如何调整呢? 提前致谢。

您应该使用行数而不是硬编码值。

 With ws2 ws1.Cells(1, i).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0) End With 

最简单的方法是wks.usedrange.rows.count 。 合理确保与保存工作簿时使用的范围更新相关的错误在post-excel中得到了修复。

所有简明的解决scheme都有失败的情况。 被接受的答案会在列完全空白的情况下产生错误的结果。

只要在数据之上或之间没有空白,这是一种不同的方式:

 ws1.Cells(, i).Copy ws2.[INDEX(A:A,COUNTA(A:A)+1)] 

请记住,您始终可以在Excel工作表上获取上次使用的范围,如下所示:

 Dim lastRange as Range Dim lastColumn as Long Dim lastRow as Long Set lastRange = Worksheets(?).UsedRange.SpecialCells(xlCellTypeLastCell) lastColumn = lastRange.Column 'return the last column index lastRow = lastRange.Row 'return the last row index 

所以要回答你的问题,你可以使用我以前的例子:

  ws1.Cells(1, i).Copy ws2.Range("A" & lastRow).Offset(1, 0) 'or ws1.Cells(1, i).Copy ws2.Cells(lastRow, 1).Offset(1, 0) 

两个陈述都会为你做这个工作。 只要注意你必须重新定义循环中的lastRange对象和lastRowvariables,否则lastRangevariables将保存其初始化值。

祝你好运!

安德列斯·亚历杭德罗·加西亚·赫尔塔多。