电子表格中的LastRow
我总是看到人们用这个来find一列中的最后一行
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
我一直在我的项目中使用这个函数来find它,因为我想要最后一个未使用的行,但现在我总是看到人们使用End xlUp的方法,我想知道为什么,因为它只是给那个列可能不正确。
Function GetLastRow(sh As Worksheet) As Long Dim X As Long X = sh.UsedRange.Rows.Count 'force excel to recalculate last row GetLastRow = sh.Cells.SpecialCells(xlLastCell).Row End Function
有没有这个function没有给最后一行,为什么会发生?
有时它会给我一行,可能是多行后我假设由于格式化的最后一行数据(导出的报告一般 – 然后我的工作方式备份在一个循环删除这些行,如果完全空白)什么实际上是使用Range来考虑使用?
我真的想要一个可靠的function,我可以依靠在将来
Excel对单元格进行稀疏跟踪:将其视为跟踪具有任何信息的每个单元格的行和列对(实际上它比这更复杂一点,但仍然是一个很好的思考方法)。 信息可以是格式或数据或公式或…
所以最后使用的单元格是单元格跟踪表中的最后一个条目。 但是单元格跟踪表不能通过清除信息来重置。
由于Excel 2007 sh.UsedRange.Rows.Count不(不幸)总是重置单元格表。
大多数情况下,当你想find最后使用的单元时,你想要find最后一个实际包含数据或公式的单元,而不是单元格表中的最后一个单元。
使用Range.End(xlUp)等查找包含数据或公式的最后一个VISIBLE单元,因此如果您隐藏行或使用过滤,需要谨慎使用。 考虑多列时需要循环代码。 但它是三种主要方法中最快的。
使用Find通常是最可靠的方法(但它忽略了形状和注释,并且在合并单元格和空数据透视表时存在问题):
jLastRow = oSht.Cells.Find(What:="*", LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row jLastCol = oSht.Range("A1:A" & CStr(jLastRow)).EntireRow.Cells.Find(What:="*", LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
在Excel中,如果从A1input数据到Z100,则使用的范围从A1到Z100。
如果删除行50到100,则使用的范围仍然是A1到Z100。 只是清除单元格不会减less使用的范围。 Excel将标记之前input数据的最后一行/最后一列。
如果您想在电子表格中find最后一个填充的单元格, UsedRange
会给您一个意想不到的结果,因为它考虑到以前可能使用过的行和列。
如果要查找列中的最后一行,则使用rows.count和end(xlUp)的方法会更准确,因为它会考虑当前值。 UsedRange可能会更大。