LƯU Ý : Tôi dự định biến đây thành "một điểm dừng" nơi bạn có thể sử dụng Correct
cách để tìm hàng cuối cùng. Điều này cũng sẽ bao gồm các thực tiễn tốt nhất để làm theo khi tìm hàng cuối cùng. Và do đó tôi sẽ tiếp tục cập nhật nó bất cứ khi nào tôi gặp một kịch bản / thông tin mới.
Những cách không đáng tin cậy để tìm hàng cuối cùng
Một số cách phổ biến nhất để tìm hàng cuối cùng rất không đáng tin cậy và do đó không bao giờ nên được sử dụng.
- Được sử dụng
- xlDown
- Bá tước
UsedRange
có nên KHÔNG BAO GIỜ được sử dụng để tìm ra ô cuối cùng trong đó có dữ liệu. Nó rất không đáng tin cậy. Hãy thử thí nghiệm này.
Nhập một cái gì đó trong tế bào A5
. Bây giờ khi bạn tính hàng cuối cùng với bất kỳ phương thức nào được đưa ra dưới đây, nó sẽ cho bạn 5. Bây giờ tô màu cho ô A10
màu đỏ. Nếu bây giờ bạn sử dụng bất kỳ mã nào dưới đây, bạn vẫn sẽ nhận được 5. Nếu bạn sử dụngUsedrange.Rows.Count
những gì bạn nhận được? Nó sẽ không phải là 5.
Đây là một kịch bản để hiển thị cách làm UsedRange
việc.
xlDown
là không đáng tin cậy như nhau.
Xem xét mã này
lastrow = Range("A1").End(xlDown).Row
Điều gì sẽ xảy ra nếu chỉ có một ô ( A1
) có dữ liệu? Bạn sẽ kết thúc đến hàng cuối cùng trong bảng tính! Nó giống như chọn ô A1
và sau đó nhấn Endphím và sau đó nhấn Down Arrowphím. Điều này cũng sẽ cung cấp cho bạn kết quả không đáng tin cậy nếu có các ô trống trong một phạm vi.
CountA
cũng không đáng tin cậy vì nó sẽ cho bạn kết quả không chính xác nếu có các ô trống ở giữa.
Và do đó ta nên tránh việc sử dụng UsedRange
, xlDown
và CountA
để tìm ô cuối cùng.
Tìm hàng cuối cùng trong một cột
Để tìm hàng cuối cùng trong Col E, hãy sử dụng cái này
With Sheets("Sheet1")
LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
End With
Nếu bạn nhận thấy rằng chúng tôi có một .
trước Rows.Count
. Chúng tôi thường chọn bỏ qua điều đó. Xem câu hỏi NÀY về lỗi có thể xảy ra mà bạn có thể nhận được. Tôi luôn khuyên sử dụng .
trước Rows.Count
và Columns.Count
. Câu hỏi đó là một kịch bản cổ điển trong đó mã sẽ thất bại vì Rows.Count
trả về 65536
cho Excel 2003 trở về trước và 1048576
cho Excel 2007 trở lên. Tương tự Columns.Count
trả về 256
và 16384
, tương ứng.
Thực tế ở trên là Excel 2007+ có 1048576
các hàng cũng nhấn mạnh vào thực tế là chúng ta phải luôn luôn khai báo biến sẽ giữ giá trị hàng Long
thay vì Integer
khác, bạn sẽ gặp Overflow
lỗi.
Lưu ý rằng phương pháp này sẽ bỏ qua bất kỳ hàng ẩn. Nhìn lại ảnh chụp màn hình của tôi ở trên cho cột A , nếu hàng 8 bị ẩn, cách tiếp cận này sẽ trở lại 5
thay vì 8
.
Tìm hàng cuối cùng trong một tờ
Để tìm Effective
hàng cuối cùng trong bảng, sử dụng này. Chú ý sử dụng Application.WorksheetFunction.CountA(.Cells)
. Điều này là bắt buộc vì nếu không có ô nào có dữ liệu trong bảng tính thì .Find
sẽ cung cấp cho bạnRun Time Error 91: Object Variable or With block variable not set
With Sheets("Sheet1")
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastrow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lastrow = 1
End If
End With
Tìm hàng cuối cùng trong bảng (ListObject)
Các nguyên tắc tương tự được áp dụng, ví dụ để lấy hàng cuối cùng trong cột thứ ba của bảng:
Sub FindLastRowInExcelTableColAandB()
Dim lastRow As Long
Dim ws As Worksheet, tbl as ListObject
Set ws = Sheets("Sheet1") 'Modify as needed
'Assuming the name of the table is "Table1", modify as needed
Set tbl = ws.ListObjects("Table1")
With tbl.ListColumns(3).Range
lastrow = .Find(What:="*", _
After:=.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With
End Sub