Code tìm dòng cuối theo nhiều cột

Liên hệ QC

moihocvba

Thành viên thường trực
Tham gia
16/8/20
Bài viết
211
Được thích
50
Chào cả nhà GPE.
Trong VBA có công thức tìm dòng cuối là lr = Range("A" & Rows.Count).End(xlUp).Row để tìm dòng cuối của cột A.
Tuy nhiên em có nhiều cột từ cột A đến cột Z, cột nào có chỉ số dòng cuối cao hơn thì lấy, thì em phải dùng code thế nào ạ?
em đã thử công thức lr = Range("A1000000:Z1000000").End(xlUp).Row nhưng kết quả cũng chỉ là dòng cuối của cột A

Mong anh chị giúp em với. Em cảm ơn nhiều ạ!
 
Chào cả nhà GPE.
Trong VBA có công thức tìm dòng cuối là lr = Range("A" & Rows.Count).End(xlUp).Row để tìm dòng cuối của cột A.
Tuy nhiên em có nhiều cột từ cột A đến cột Z, cột nào có chỉ số dòng cuối cao hơn thì lấy, thì em phải dùng code thế nào ạ?
em đã thử công thức lr = Range("A1000000:Z1000000").End(xlUp).Row nhưng kết quả cũng chỉ là dòng cuối của cột A

Mong anh chị giúp em với. Em cảm ơn nhiều ạ!
Thử với chỉ số cuối của vùng dữ liệu trên sheet thử coi
 
Upvote 0
Chào cả nhà GPE.
Trong VBA có công thức tìm dòng cuối là lr = Range("A" & Rows.Count).End(xlUp).Row để tìm dòng cuối của cột A.
Tuy nhiên em có nhiều cột từ cột A đến cột Z, cột nào có chỉ số dòng cuối cao hơn thì lấy, thì em phải dùng code thế nào ạ?
em đã thử công thức lr = Range("A1000000:Z1000000").End(xlUp).Row nhưng kết quả cũng chỉ là dòng cuối của cột A

Mong anh chị giúp em với. Em cảm ơn nhiều ạ!
Bạn thử code sau nhé:

Mã:
Sub DongCuoi()
    MsgBox ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
End Sub
 
Upvote 0
Chào cả nhà GPE.
Trong VBA có công thức tìm dòng cuối là lr = Range("A" & Rows.Count).End(xlUp).Row để tìm dòng cuối của cột A.
Tuy nhiên em có nhiều cột từ cột A đến cột Z, cột nào có chỉ số dòng cuối cao hơn thì lấy, thì em phải dùng code thế nào ạ?
em đã thử công thức lr = Range("A1000000:Z1000000").End(xlUp).Row nhưng kết quả cũng chỉ là dòng cuối của cột A

Mong anh chị giúp em với. Em cảm ơn nhiều ạ!
Thêm một cách khác:
Mã:
Lr = ActiveSheet.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Bài #3 của anh HLMT bạn chú ý nếu các ô phía dưới có tô màu (không có dữ liệu) thì nó vẫn nhận ô tô màu là dòng cuối
 
Upvote 0
Bạn thử code sau nhé:

Mã:
Sub DongCuoi()
    MsgBox ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
End Sub
Dạ con cám ơn chú ạ. Chú cho con hỏi 1 chút nữa, sau khi tìm ra dòng cuối và cột cuối, thì con cần Set vùng in cho bảng tính để in ra, con đang không biết làm thế nào, chú chỉ con với ạ

Đây là code con viết:
Mã:
Sub SetVUnginnn()
    Dim CotCuoi As Long, DongCuoi As Long
    CotCuoi = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column
    DongCuoi= ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row

    ActiveSheet.PageSetup.PrintArea = "$A$1:$K$20"
End Sub
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$20"
Dòng đậm là con set vùng in với địa chỉ cố định, còn trường hợp dòng cuối và cột cuối biến thiên như trên, thì con phải set thế nào ạ, mong chú và mọi người chỉ con với!
Con cám ơn ạ!
 
Upvote 0
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$20"
Dòng đậm là con set vùng in với địa chỉ cố định, còn trường hợp dòng cuối và cột cuối biến thiên như trên, thì con phải set thế nào ạ, mong chú và mọi người chỉ con với!
Sửa theo code bạn:
Mã:
Option Explicit

Sub SetVUnginnn()
    Dim CotCuoi As Long, DongCuoi As Long
    With ActiveSheet
        CotCuoi = .UsedRange.Columns(.UsedRange.Columns.Count).Column
        DongCuoi = .UsedRange.Rows(.UsedRange.Rows.Count).Row
        .PageSetup.PrintArea = .Range("A1", .Cells(DongCuoi, CotCuoi)).Address
    End With
End Sub
 
Upvote 0
Mã:
Sub SetVUnginnn()
    With ActiveSheet
        .PageSetup.PrintArea = .Range(.Cells(1, 1), .UsedRange).Address
    End With
End Sub
Nhưng nếu không thiết lập vùng in thì dùng tới đâu excel cũng chỉ in tới đó, vậy thì làm cái này để làm gì???
 
Upvote 0
Upvote 0
Mã:
Sub SetVUnginnn()
    With ActiveSheet
        .PageSetup.PrintArea = .Range(.Cells(1, 1), .UsedRange).Address
    End With
End Sub
Nhưng nếu không thiết lập vùng in thì dùng tới đâu excel cũng chỉ in tới đó, vậy thì làm cái này để làm gì???
Dạ, phải thiết lập vùng in để ép các cột vào trong cùng 1 trang ạ, còn nếu ko làm vậy thì nó sẽ thành nhiều trang ạ.
 
Upvote 0
Code xịn nhất:

For dong = Rows.Count To 1 Step -1
For cot = Columns.Count To 1 Step -1
If dongCuoi = 0 And Not IsEmpty(Cells(dong, cot) Then dongCuoi = dong
Next cot
Next dong
 
Upvote 0
Anh phải thêm chữ siêu việt vào nữa. ;)
Code này chạy có cần siêu máy tính <cắt bỏ từ viết tắt>?
Chỉ cần nhiều ram thôi. Duyệt đủ 17.179.869.184 cells đâu khó lắm.

Chú thích: để lấy được con số trên, mình bảo VBA làm con toán Rows.Count * Columns.Count; nó trả lời "Overflow"
Phải vầy nó mới chịu:
1659073943730.png
 
Upvote 0
Em đã là thành công rồi ạ, cám ơn anh chị rất nhiều ạ!
 
Upvote 0
Không xét cả cell lẫn trị dòng cuối đủ trên 17 tỷ lần thì chưa xứng gọi là "siêu".
Chỉ code nào xét cells trên 1 lần mới đánh bại được code này.
 
Upvote 0
Code xịn nhất:

For dong = Rows.Count To 1 Step -1
For cot = Columns.Count To 1 Step -1
If dongCuoi = 0 And Not IsEmpty(Cells(dong, cot) Then dongCuoi = dong
Next cot
Next dong
Vậy đưa 2 vòng này vô usedrange như bài #3 thì không cần siêu máy tính mà vẫn nhanh,vẫn đúng phải không thầy?
 
Upvote 0
Web KT

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

Back
Top Bottom