2012-07-21 33 views
7

Mục tiêu:
Biến phải chứa số lượng hàng từ một trang tính cụ thể.Số lượng hàng trong trang tính

Sự cố:
Mã cú pháp nào trong Excel VBA tôi có cần tính số lượng hàng từ trang tính không?

+0

Nếu bạn có nghĩa là tổng số hàng, 'Worksheet.Rows.Count' sẽ làm điều đó. Nếu bạn có ý gì đó khác, hãy cho chúng tôi biết. –

Trả lời

14

Sử dụng phương pháp usedrange là một trong những mục yêu thích của tôi, nhưng nó cần phải được điều trị bằng quan tâm. Nó có một vài sai sót/gotchas. Đó là một vấn đề được biết rằng excel không theo dõi phạm vi được sử dụng rất tốt. Bất kỳ tham chiếu đến phạm vi được sử dụng thông qua VBA sẽ đặt lại giá trị cho phạm vi được sử dụng hiện tại. Vì vậy, cố gắng chạy thủ tục phụ này khi bạn đang nhận được phạm vi sử dụng:

Dim lRowCount as Long 

Application.ActiveSheet.UsedRange 
lRowCount = Worksheets("MySheet").UsedRange.Rows.Count 

Nhưng lưu ý điều này sẽ cung cấp cho bạn các tính sử dụng phạm vi, vì vậy nếu bạn có hàng trống ở phía trên cùng của bảng tính của bạn (mà thường mọi người làm để không gian cho những thứ như tiêu chí lọc vv) thì chúng sẽ không được tính. Phương thức usedrange cũng có thể bị ảnh hưởng bởi định dạng.

Nếu bạn muốn hàng cuối cùng được sử dụng, đó là những gì tôi nghĩ rằng bạn muốn, sau đó bạn có thể sử dụng phương pháp tìm đó là đáng tin cậy hơn:

Dim rLastCell As Range 
Dim lLastRow As Long 

Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ 
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False) 

If Not rLastCell Is Nothing Then lLastRow = rLastCell.Row 

Nếu bạn biết rằng bạn có ít nhất một tế bào với các dữ liệu trong đó, sau đó bạn có thể đơn giản hóa ở trên để:

Dim lLastRow As Long 

lLastRow = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ 
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row 

See here regarding used range I spoke about above

5

Bạn cũng có thể thử:

i = Sheets("SheetName").UsedRange.Rows.Count 

Tuy nhiên, điều này có thể nhận được một chút lỗi nếu bạn bắt đầu xóa và thanh toán bù trừ hàng.

Một cách tốt hơn để làm điều này là:

i = Cells(Sheets("SheetName").Rows.Count, 1).End(xlup).Row 

này giả định rằng mỗi hàng có dữ liệu trong cột 1.

Các vấn đề liên quan