Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在超过65536行时查找最后一行_Vba_Excel - Fatal编程技术网

Vba 在超过65536行时查找最后一行

Vba 在超过65536行时查找最后一行,vba,excel,Vba,Excel,我在纸上循环,所以I是循环的一部分。行数超过65536行,如何调整。提前感谢。您应该使用行数,而不是硬编码值 ws1.Cells(1, i).Copy ws2.Range("a65536").End(xlUp).Offset(1, 0) 您应该使用行数,而不是硬编码的值 ws1.Cells(1, i).Copy ws2.Range("a65536").End(xlUp).Offset(1, 0) 最简单的方法是wks.usedrange.rows.count。合理确定保存工作簿时与u

我在纸上循环,所以I是循环的一部分。行数超过65536行,如何调整。提前感谢。

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

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

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

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

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

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

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

With ws2
    ws1.Cells(1, i).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
为了回答您的问题,您可以使用我前面的示例:

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
这两种说法都能帮到你。请注意,必须在循环中重新定义lastRange对象和lastRow变量,否则lastRange变量将保留其初始化值

祝你好运


Andrés Alejandro García Hurtado。

请记住,您始终可以在excel工作表上获得最后使用的范围,如下所示:

With ws2
    ws1.Cells(1, i).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
为了回答您的问题,您可以使用我前面的示例:

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
这两种说法都能帮到你。请注意,必须在循环中重新定义lastRange对象和lastRow变量,否则lastRange变量将保留其初始化值

祝你好运


安德烈·亚历杭德罗·加西亚·赫塔多。

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

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

 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)

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

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

 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)

在某些情况下,使用
CountLarge
代替
Count
可能也是一个好主意?我不认为当前的行数会导致溢出错误,但这是我过去在计算单元格时遇到的问题…@eirikdaude如果返回的结果可能超过了Long的最大值,请使用CountLarge。在对单个列中的行进行计数时没有问题(至少在当前工作表限制的情况下)。您必须对>2000列中的单元格进行计数,才能当前使用CountLong。在某些情况下,使用
CountLarge
而不是
count
可能也是一个好主意?我不认为当前的行数会导致溢出错误,但这是我过去在计算单元格时遇到的问题…@eirikdaude如果返回的结果可能超过了Long的最大值,请使用CountLarge。在对单个列中的行进行计数时没有问题(至少在当前工作表限制的情况下)。您必须对>2000列中的单元格进行计数,才能当前使用CountLong。以前已被多次询问<代码>xlUp如下所示通常会给出正确的答案,空白列是一个边缘条件,而它不会<代码>查找比以前多次要求的更好<代码>xlUp如下所示通常会给出正确的答案,空白列是一个边缘条件,而它不会<代码>查找更好