2014-11-22 103 views
0

我總是看到這樣人們用它來找到最後一排一列LASTROW在電子表格

lRow = .Range("A" & .Rows.Count).End(xlUp).Row 

我一直用這個功能在我的項目找到它,因爲我想最後未使用行,但現在我總是看到人們使用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 

是否有任何情況下,此功能未能給出最後一行以及爲什麼會發生?

有時它會給我一行,可能是由於格式化導致的最後一行數據後面可能有多行(導出的報告一般 - 然後我回到工作環境中,以便刪除這些行if完全空白) UsedRange實際考慮使用什麼?

我真的希望我可以在未來

回答

2

Excel中追蹤細胞稀疏:把它作爲跟蹤針對所有提供的信息(實際上它有點更重要的是複雜的,但它仍然想着它的一個很好的方式),每個單元的行和列對。這些信息可以被格式化或數據或公式或...
所以上次使用的細胞是在細胞跟蹤表中的最後一項。但是單元格跟蹤表不會通過清除信息來重置。

而且,由於Excel 2007中sh.UsedRange.Rows.Count不(不幸)總是重置單元格表。

大多數情況下,當您想要查找最後使用的單元格時,您希望找到最後一個實際包含數據或公式的單元格,而不是單元格表格中的最後一個單元格。

使用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 
0

在Excel依賴,如果從A1輸入數據,Z100,則使用範圍從去A1至Z100可靠的功能。

如果刪除行50〜100,使用的範圍仍然是A1至Z100。只是清除單元格不會減少使用的範圍。 Excel將標記之前輸入數據的最後一行/最後一列。

UsedRange如果您想查找電子表格中最後一個填充的單元格,可能會給您一個意外的結果,因爲它考慮到以前可能使用過的行和列。

如果你想找到最後一排一列,用rows.count和結束(xlUp)的方法更爲準確,因爲它認爲當前值。 UsedRange可能會更大。

+0

沒有,我打電話X = sh.UsedRange。 Rows.Count函數重新計算使用的範圍,所以這不是一個問題,這個函數適用於我,只是有時剛剛打開一個表,它說空白行不是空白,所以它必須考慮到格式化? – 2014-11-22 11:11:53

+0

如果在其他列中沒有檢查到數據,也會發現單列不準確。 – 2014-11-22 11:15:51