当行数超过65536时查找最后一行

时间:2015-03-31 04:47:22

标签: excel vba excel-vba

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

我正在循环播放工作表,因此 i 是循环的一部分。行数超过65536,那么我该如何调整呢。提前谢谢。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

请记住,您始终可以在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对象和lastRow变量,否则lastRange变量将保存其初始化的值。

祝你好运!

AndrésAlejandroGarcíaHurtado。