Tìm LastRow cho một Range (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

phuvacgach

Thành viên chính thức
Tham gia
13/3/11
Bài viết
56
Được thích
9
Mã:
Sub FindlLastRow()
Dim wsS As Worksheet
Set wsS = ThisWorkbook.Sheets("Sheet1")
Dim lLastRow As Long, TotalRows As Long
TotalRows = wsS.Cells(1, 1).EntireColumn.Rows.Count
lLastRow = wsS.Range(wsS.Cells(TotalRows, 1), wsS.Cells(TotalRows, 5)).End(xlUp).Row
MsgBox lLastRow
End Sub
Các bác ơi,
Em muốn tìm dòng cuối cùng cho Range như trong Sheet mà làm mãi cứ không ra.
Các bác xem hộ em đoạn code kia đã đúng chưa nhé.
Em cảm ơn.
 

File đính kèm

Mã:
Sub FindlLastRow()
Dim wsS As Worksheet
Set wsS = ThisWorkbook.Sheets("Sheet1")
Dim lLastRow As Long, TotalRows As Long
TotalRows = wsS.Cells(1, 1).EntireColumn.Rows.Count
lLastRow = wsS.Range(wsS.Cells(TotalRows, 1), wsS.Cells(TotalRows, 5)).End(xlUp).Row
MsgBox lLastRow
End Sub
Các bác ơi,
Em muốn tìm dòng cuối cùng cho Range như trong Sheet mà làm mãi cứ không ra.
Các bác xem hộ em đoạn code kia đã đúng chưa nhé.
Em cảm ơn.

Bạn viết gì mà dài quá vậy? Thử dòng lệnh này xem sao
Sub LastRow()
MsgBox Sheets("Sheet1").Cells.SpecialCells(11).Row
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Oh, em thấy có vấn đề sau:
Chạy lần 1: Kết quả là 5-> ĐÚng
Em thêm một giá trị vào cột C--> Chạy tiếp kết quả là 6--> ĐÚng
-> Xóa giá trị đó đi, chạy lại--> kết quả vẫn là 6???--> Sai (Đáng lẽ phải là 5)
Bác giải thích giúp em nhé.
 
Upvote 0
Oh, em thấy có vấn đề sau:
Chạy lần 1: Kết quả là 5-> ĐÚng
Em thêm một giá trị vào cột C--> Chạy tiếp kết quả là 6--> ĐÚng
-> Xóa giá trị đó đi, chạy lại--> kết quả vẫn là 6???--> Sai (Đáng lẽ phải là 5)
Bác giải thích giúp em nhé.
Muốn thế thì có cái khác.
PHP:
Sub LastRow2()
MsgBox Sheets("Sheet1").UsedRange.SpecialCells(11).Row
End Sub
 
Upvote 0
Cũng vs bảng trên, em định dạng ô border cho tới dòng 10 và không ghi giá trị nào từ dòng 5 tới dòng 10.
Kết quả LastRow lại là 10---> Đáng lẽ chỉ là 5 vì chỉ tính ô chứa giá trị.
 
Upvote 0
Cũng vs bảng trên, em định dạng ô border cho tới dòng 10 và không ghi giá trị nào từ dòng 5 tới dòng 10.
Kết quả LastRow lại là 10---> Đáng lẽ chỉ là 5 vì chỉ tính ô chứa giá trị.
Thử vầy coi sao
Sub LastRow()
With Sheets("Sheet1").UsedRange
MsgBox .CurrentRegion.Rows.Count + .Row - 1
End With
End Sub
 
Upvote 0
Thử vầy coi sao
Sub LastRow()
With Sheets("Sheet1").UsedRange
MsgBox .CurrentRegion.Rows.Count + .Row - 1
End With
End Sub

Mấy vụ tìm LastRow không thể dùng CurrentRegion được đâu. Dùng Find là ngon nhất, ví dụ:
Mã:
Sub Test()
  Dim rng As Range
  Set rng = Sheet1.UsedRange
  MsgBox Cells.Find("*", rng(1, 1), , , xlByRows, xlPrevious).Row
End Sub
 
Upvote 0
Ngoài ra ta dùng Sheet1.UsedRange.Rows.Count để xác định cũng được.
 
Upvote 0
Ngoài ra ta dùng Sheet1.UsedRange.Rows.Count để xác định cũng được.
Code này gặp yêu cầu của bài số 6 thì thua anh ơi. Xài code của anh NDU cho chắc ăn.
Mấy vụ tìm LastRow không thể dùng CurrentRegion được đâu
Em thấy mình không khái báo cho gọn được không anh? Hình như đâu có ảnh hưởng gì đến usedrange.
Sub LastRow()
MsgBox Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
các ý kiến trên đúng tuỳ trường hợp. tham khảo link:
http://vbaexpress.com/forum/showthread.php?t=9774
hiểu theo nghĩa thông thường là dòng cuối chứa data (value và formula) thì cách của ndu là phù hợp nhất, nhưng nên bớt cái usedrange đi (để xác định được cái này có khi pc còn tốn thời gian hơn cả việc find từ range("a1")
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom