Code tìm dòng cuối của cột dài nhất trong sheet

Liên hệ QC

Anhduong2015

Thành viên chính thức
Tham gia
29/7/21
Bài viết
53
Được thích
12
Kính gửi: anh/chị
- Em muốn tìm dòng cuối cùng chứa dữ liệu của một vùng trong bảng tính (không phải là toàn bộ Sheet) cụ thể theo file là vùng từ C3:F15 sẽ lấy cột dài nhất chứa dữ liệu trả kết quả là dòng 14
- Có thể chủ đề này rất nhiều trên diễn đàn tuy nhiên do em không tìm được bài liên quan nên xin phép được mở đăng bài mới.
- Mong nhận được sự hướng dẫn, giúp đỡ hoặc tham khảo từ các anh/chị trong diễn đàn.
Capture.PNG
Xin cám ơn
 

File đính kèm

  • dongcuoi.xlsb
    8.9 KB · Đọc: 8
Dòng cuối = [C3].CurrentRegion.Rows.Count + 2
 
Upvote 1
Dòng cuối = [C3].CurrentRegion.Rows.Count + 2
Vui buồn lẫn lộn
Đầu tiên chân thành cám ơn anh @ptm0412 đã giúp đỡ em.
Buồn là hơn 2 giờ em search google, anh trợ giúp chỉ đơn giản 1 dòng lệnh.
Bài đã được tự động gộp:

Dòng cuối = [C3].CurrentRegion.Rows.Count + 2
Anh ơi nhân tiện cho em hỏi thêm ạ em thử test có ô rỗng và đứt quãng như hình đính kèm mong anh xem giúp ạ.
Untitled.png
 
Lần chỉnh sửa cuối:
Upvote 0
Anh ơi nhân tiện cho em hỏi thêm ạ em thử test có ô rỗng và đứt quãng như hình đính kèm mong anh xem giúp ạ.
Đáng lẽ dữ liệu mẫu phải đưa đủ trường hợp. (Đừng đẻ thêm trường hợp nữa nhé)
PHP:
Sub DongCuoi()
Dim Rng As Range, Cols As Long, LastRw As Long, tmp As Long
Set Rng = [C3].CurrentRegion
Cols = Rng.Columns.Count
For i = 3 To Cols + 2 '2 is 2 columns A and B'
    tmp = Cells(10000, i).End(xlUp).Row
    If tmp > LastRw Then LastRw = tmp
Next
MsgBox LastRw
End Sub
 
Upvote 0
Đáng lẽ dữ liệu mẫu phải đưa đủ trường hợp. (Đừng đẻ thêm trường hợp nữa nhé)
PHP:
Sub DongCuoi()
Dim Rng As Range, Cols As Long, LastRw As Long, tmp As Long
Set Rng = [C3].CurrentRegion
Cols = Rng.Columns.Count
For i = 3 To Cols + 2 '2 is 2 columns A and B'
    tmp = Cells(10000, i).End(xlUp).Row
    If tmp > LastRw Then LastRw = tmp
Next
MsgBox LastRw
End Sub
Anh ơi các cột nó không liền nhau kết quả không đúng à.
 
Upvote 0
Dòng dữ liệu mới có dài nhất, chứ cột dữ liệu thường người ta gọi khác hay sao ý chứ nhỉ!

Tìm dòng cuối có dữ liệu trong các cột người ta hay xài phương thức FIND("*",. . . . . ). . .
 
Upvote 0
Anh ơi các cột nó không liền nhau kết quả không đúng à.
Tôi nói là làm theo dữ liệu mẫu, và thường là tôi làm cho dữ liệu chuẩn, dòng tiêu đề bắt buộc không được bỏ trống. Dữ liệu không chuẩn thì làm gì cũng dở. Chứ code trên chỉ cần thêm 1 dòng lệnh

Tìm dòng cuối có dữ liệu trong các cột người ta hay xài phương thức FIND("*",. . . . . ). . .
Em dùng cách đơn giản cho người mới dễ hiểu
 
Upvote 0
Dòng dữ liệu mới có dài nhất, chứ cột dữ liệu thường người ta gọi khác hay sao ý chứ nhỉ!

Tìm dòng cuối có dữ liệu trong các cột người ta hay xài phương thức FIND("*",. . . . . ). . .
Cái này dùng được không bác Sa.
Mã:
Function FindLastRow(wsObj As Worksheet) As Long
    On Error Resume Next
    FindLastRow = wsObj.Cells.Find(What:="*", _
                                   After:=wsObj.Range("A1"), _
                                   LookAt:=xlPart, _
                                   LookIn:=xlFormulas, _
                                   SearchOrder:=xlByRows, _
                                   SearchDirection:=xlPrevious, _
                                   MatchCase:=False).Row
    On Error GoTo 0
End Function
 
Upvote 0
Với cấu trúc dữ liệu bất kỳ trên sheet có thể dùng code sau
Mã:
Function lastRowCol(ByVal rng As Range, ByVal FindRow As Boolean) As Long
'    Ham tra ve dong cuoi hoac cot cuoi trong vung rng
'     FindRow = TRUE -> tim dong cuoi, FindRow = FALSE -> tim cot cuoi
Dim cell_ As Range
    With rng
        If FindRow Then
            Set cell_ = .Find("*", .Cells(1), xlFormulas, xlPart, xlByRows, xlPrevious)
            If Not cell_ Is Nothing Then lastRowCol = cell_.Row
        Else
            Set cell_ = .Find("*", .Cells(1), xlFormulas, xlPart, xlByColumns, xlPrevious)
            If Not cell_ Is Nothing Then lastRowCol = cell_.Column
        End If
    End With
End Function

Sub test()
Dim a As Long
    a = lastRowCol(Sheet1.Cells, True)
    If a Then
        MsgBox "Dong cuoi tren sheet la " & a
    Else
        MsgBox "Khong co du lieu tren sheet"
    End If
'    -----------
    a = lastRowCol(Sheet1.Range("B2:I10"), False)
    If a Then
        MsgBox "Cot cuoi trong B2:I10 la " & a
    Else
        MsgBox "Khong co du lieu trong B2:I10"
    End If
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom