当我想查找上次使用的单元格值时,我使用:
将最后一行的尺寸设为最长
LastRow=范围(“E4:E48”)。结束(xlDown)。行
调试。打印最后一行
当我将单个元素放入单元格时,我得到了错误的输出。但当我在单元格中输入多个值时,输出是正确的。
这背后的原因是什么
注意:我打算将此设置为“一站式张贴”,您可以使用正确的方法查找最后一行。这还将包括查找最后一行时要遵循的最佳实践。因此,每当我遇到新的场景/信息时,我都会不断更新它
查找最后一行的不可靠方法
查找最后一行的一些最常见的方法非常不可靠,因此不应使用
- UsedRange
- xlDown
- 伯爵
UsedRange应永不使用查找最后一个包含数据的单元格。这是非常不可靠的。试试这个实验
在单元格A5中键入内容。现在,当您使用下面给出的任何方法计算最后一行时,它将为您提供5。现在将单元格A10涂成红色。如果你现在使用下面的任何代码,你仍然会得到5。如果你使用Usedrange.Rows.Count你会得到什么?不会是5点
下面是一个演示UsedRange如何工作的场景
xlDown同样不可靠
考虑一下这个代码
lastrow=范围(“A1”).End(xlDown).Row
如果只有一个单元格(A1)有数据,会发生什么情况?您将到达工作表中的最后一行!这就像选择单元格A1,然后按结束键,然后按向下箭头键。如果在某个范围内有空白单元格,这也会导致不可靠的结果
CountA也不可靠,因为如果中间有空白单元格,它将给出不正确的结果
因此,应避免使用UsedRange、xlDown和CountA查找最后一个单元格
查找列中的最后一行
要查找列E中的最后一行,请使用
带图纸(“图纸1”)
LastRow=.Range(“E”&;Rows.Count).End(xlUp).Row
以
如果您注意到在行之前有一个。请计数。我们常常选择忽略这一点。关于可能出现的错误,请参见此问题。我总是建议在行.计数和列.计数之前使用。这个问题是一个典型的场景,其中代码将失败,因为对于Excel 2003及更早版本,Rows.Count返回65536,对于Excel 2007及更高版本返回1048576。类似地,Columns.Count分别返回256和16384
Excel 2007+具有1048576行的上述事实也强调了这样一个事实,即我们应该始终将保存行值的变量声明为Long,而不是Integer,否则会出现溢出错误
请注意,此方法将跳过任何隐藏行。回顾我上面的A列截图,如果第8行被隐藏,这种方法将返回5,而不是8
查找工作表中的最后一行
要查找工作表中的有效最后一行,请使用此选项。注意Application.WorksheetFunction.CountA(.Cells)的用法。这是必需的,因为如果工作表中没有包含数据的单元格,则.Find将给出运行时错误91:对象变量或未设置块变量
带图纸(“图纸1”)
If Application.WorksheetFunction.CountA(.Cells)<&燃气轮机;0那么
lastrow=.Cells.Find(内容:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lastrow=1
如果结束
以
查找表中的最后一行(ListObject)
同样的原则也适用,例如,获取表格第三列的最后一行:
子FindAstrowinExceltableColaAndB()
最后一排一样长
将ws设置为工作表,tbl设置为ListObject
设置ws=Sheets(“Sheet1”)“根据需要进行修改
'假设表的名称为“Table1”,根据需要进行修改
Set tbl=ws.ListObjects(“表1”)
带tbl.ListColumns(3.Range)
lastrow=.Find(内容:=“*”_
之后:=.个单元格(1)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
以
端接头