2011-11-13 47 views
0

如何確定工作表中使用的行的總數?總行數

Dim rows As Integer 
rows = ActiveWorkbook.Sheets(1).Range("A65536").End(xlUp).Offset(1, 0).Rows.Count 

我需要通過我的所有行要知道這樣我就可以循環:

For row = 1 To rows 
    ' Check if row contains pattern. 
    match = ReFind(Range(row & ":" & row), "^.*(\[KA\])|(\[KIC\])|(\[KS\])|(\[NA\]).*$") 

    If match <> "" Then 
     Call CopyRow(row) 
    End If 
Next row 
+0

相關:http://stackoverflow.com/q/114493/365102 –

+1

我不會使用「使用範圍」來查找最後一個單元格。這是不可靠的。嘗試使用:'行= Cells.Find(什麼:= 「*」,後:= [A1],\t \t \t SearchOrder:= xlByColumns,\t \t \t SearchDirection:= xlPrevious).Row' – Reafidy

+0

我Reafidy同意。儘管我會使用範圍對象來測試'Find'是否成功,否則這段代碼在空白紙上失敗 – brettdj

回答

3

使用.Cells(.Rows.Count, "A").End(xlUp).Row將返回最後一排的一個特定列使用,不一定是最後一行與任何使用的細胞。


另一種方法是使用Sheet.UsedRange但是您必須瞭解某些限制。

.UsedRange返回一個包圍所有使用過的單元格的矩形區域,因此它可能不會在單元格A1處錨定。爲了讓底部區間的行號使用

.UsedRange.Row + .UsedRange.Rows.Count - 1 

當刪除行(或列).UsedRange可能無法更新,所以你可能會得到一個範圍比真正的使用範圍更大。

可以強制更新:如果你樂於使用ActiveSheet然後puting行

Application.ActiveSheet.UsedRange 
在你的代碼

強制更新。


如果你不想使用ActiveSheet(例如在例行通過的紙張作爲參數),然後使用:

i = Sh.UsedRange.Row 

不要依賴於在此的i值點。下一個參考.UsedRange將是真正的使用範圍。

+0

我在發佈後30分鐘發現'.UsedRange'。 :)但謝謝你的詳細答案;我相信這將有助於未來的訪問者。 –

+0

如果列爲空,此代碼還將返回列中的第一個單元格。因此,第1行的結果應進一步測試以確定它是否真正被使用。 – brettdj