ws1.Cells(1, i).Copy ws2.Range("a65536").End(xlUp).Offset(1, 0)
我正在循环播放工作表,因此 i 是循环的一部分。行数超过65536,那么我该如何调整呢。提前谢谢。
答案 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。