电子表格中的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可能会更大。