Hỏi về code tìm dòng cuối cùng! (1 người xem)

Liên hệ QC

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

vova2209

Thành viên tích cực
Tham gia
5/4/17
Bài viết
835
Được thích
112
Giới tính
Nam
Nghề nghiệp
Đường bộ
em muốn tìm dòng cuối cùng của tất cả cột, Nhưng giờ em có nhiều Sub mỗi lần phải tạo như này:
Dim lr As Long
lr = Range("F65535").End(xlUp).row
Range("G3:J3").Copy
Range("G3:J" & lr).PasteSpecial Paste:=xlPasteFormulas
---------------------
>> Hay là có cách khác không ạ!
 
Lần chỉnh sửa cuối:
Cái đó gặp ẩn dòng thì không đúng thầy ạ
dùng cách của bạn Mutants Men để tìm dòng cuối kể cả bị ẩn
Mã:
Function LastRowRange(ByVal Rng As Range) As Long
    LastRowRange = Range(Rng(1, 1), Cells(Rows.Count, Rng(1, Rng.Columns.Count).Column)).Find(What:="*", After:=
Rng(1, 1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
VBA là bút sa gà chết. Làm việc với một mớ dữ liệu lớn làm sao kiểm soát hết. Vì vậy trước khi bước vào phải khẳng định:
1 là chấp nhận dòng/cột ẩn và merged cells, 2 là không chấp nhận

Nếu bạn theo 1 thì mọi code đều phải viết theo kiểu đại chúng để bao trùm hết
Néu bạn theo 2 thì phải gỡ cột/dòng ẩn và merged cells trước khi làm việc

Đầu nào cũng có cái lợi và cái bất lợi của nó. Tôi không kêu gọi theo đường nào nhưng nếu theo đường nào thì phải giữ cho đúng lệ của đường ấy.
 
Upvote 0
Hàm LastRowRange ở bài #10 đáp ứng điều này
Sub CopyTHCD()

getSpeed True
Range("B3:C3").Copy 'Copy Công thuc'
Range("B4:C" & Fdongcuoi(1)).PasteSpecial Paste:=xlPasteFormulas

Range("A3").Select

Application.CutCopyMode = False
getSpeed False
End Sub

'TÌM DÒNG CUÔI CÙNG------------------------------------------------
Function Fdongcuoi(ByVal Col As String, Optional Sh As Worksheet = Nothing) As Long
If Sh Is Nothing Then
Fdongcuoi = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
Else
Fdongcuoi = Sh.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
End If
End Function
Em làm được rồi chỉ cần cột nào có dữ liệu nhiều nhất nó sẽ chạy theo cột đó. Fdongcuoi(1) em phải thêm số (1) vào code nó mới chạy là sao ạ..
 
Upvote 0
dùng cách của bạn Mutants Men để tìm dòng cuối kể cả bị ẩn
Mã:
Function LastRowRange(ByVal Rng As Range) As Long
    LastRowRange = Range(Rng(1, 1), Cells(Rows.Count, Rng(1, Rng.Columns.Count).Column)).Find(What:="*", After:=
Rng(1, 1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End Function
Nếu cột không có dữ liệu nó lỗi anh ạ
 
Upvote 0
Nếu cột không có dữ liệu nó lỗi anh ạ
Nếu không có dữ liệu thì "tìm dòng cuối có dữ liệu" không biết nên trả kết quả là gì?
Mã:
Function LastRowRange(ByVal Rng As Range) As Long
  On Error Resume Next
  LastRowRange = Range(Rng(1, 1), Cells(Rows.Count, Rng(1, Rng.Columns.Count).Column)).Find(What:="*", After:=Rng(1, 1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  If Err.Number > 0 Then Err.Clear ': LastRowRange = 1
End Function
 
Upvote 0
Nếu không có dữ liệu thì "tìm dòng cuối có dữ liệu" không biết nên trả kết quả là gì?
Mã:
Function LastRowRange(ByVal Rng As Range) As Long
  On Error Resume Next
  LastRowRange = Range(Rng(1, 1), Cells(Rows.Count, Rng(1, Rng.Columns.Count).Column)).Find(What:="*", After:=Rng(1, 1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  If Err.Number > 0 Then Err.Clear ': LastRowRange = 1
End Function
Nó trả về dòng đầu tiên. Với lại anh bỏ qua tham số LookIn nên nó nó bỏ qua dòng có công thức luôn ạ.
 
Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

Upvote 0
Sao khi Gõ hàm trực tiếp vào Exel nếu số dòng > dòng chứa công thức kết quả bằng 1 . Còn nhỏ hơn hoặc băng thì kết quả bằng 17 anh ạ
Do chỉ tìm từ dòng của tham số Rng trở xuống, Chỉnh lại để tìm cả cột
Mã:
Function LastRowRange(ByVal Rng As Range) As Long
  On Error Resume Next
  LastRowRange = Range(Cells(1, Rng(1, 1).Column), Cells(Rows.Count, Rng(1, Rng.Columns.Count).Column)).Find(What:="*", After:=Cells(1, Rng(1, 1).Column), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  If Err.Number > 0 Then Err.Clear: LastRowRange = 1
End Function
 
Upvote 0
Web KT

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

Back
Top Bottom