Đã hết hạn trả lời vấn đề 5. Không ai đưa ra được đáp án.
Đây là đoạn code mục đích để tìm dòng cuối cùng chứa dữ liệu trong cột A trên Excel. Người ta sẽ đặt con trỏ chuột vào cells cuối cùng của cột A (dòng 65536) và ấn Ctrl + ↑ . Con trỏ sẽ chạy về cells cuối cùng chứa dữ liệu trong cột A.
Tuy nhiên với Excel 2003 trở về trước thì đúng là nó có 65536 dòng.
Nhưng từ Excel 2007 trở đi, thì số dòng trong sheet sẽ là 1048 576 dòng. Vì vậy mà code trên sẽ không phù hợp để tìm cells cuối chứa dữ liệu trong cột A nếu người dùng sử dụng Excel 2007 hoặc mới hơn.
Người ta có chú ý rằng, với Excel 2007 trở đi, nếu dùng Count (đếm số dòng, có kiểu trả về là Long) có thể dẫn tới lỗi tràn số.
Do đó nên sử dụng CountLarge (có kiểu trả về là Variant).
Sau đây, giới thiệu hai đoạn code có cùng mục đích tìm cells cuối cùng chứa dữ liệu trên cột A:
Đây là đoạn code mục đích để tìm dòng cuối cùng chứa dữ liệu trong cột A trên Excel. Người ta sẽ đặt con trỏ chuột vào cells cuối cùng của cột A (dòng 65536) và ấn Ctrl + ↑ . Con trỏ sẽ chạy về cells cuối cùng chứa dữ liệu trong cột A.
Tuy nhiên với Excel 2003 trở về trước thì đúng là nó có 65536 dòng.
Nhưng từ Excel 2007 trở đi, thì số dòng trong sheet sẽ là 1048 576 dòng. Vì vậy mà code trên sẽ không phù hợp để tìm cells cuối chứa dữ liệu trong cột A nếu người dùng sử dụng Excel 2007 hoặc mới hơn.
Người ta có chú ý rằng, với Excel 2007 trở đi, nếu dùng Count (đếm số dòng, có kiểu trả về là Long) có thể dẫn tới lỗi tràn số.
Do đó nên sử dụng CountLarge (có kiểu trả về là Variant).
Sau đây, giới thiệu hai đoạn code có cùng mục đích tìm cells cuối cùng chứa dữ liệu trên cột A:
Mã:
'===========================================================
' Tim dong cuoi cung tren cot A
'===========================================================
Sub LastRow()
If Application.ActiveCell Is Nothing Then Exit Sub ' File excel đang mở mà sheet không được active thì thoát chương trình
' Tìm dòng cuối trên cột A
With Application.Cells(Rows.CountLarge, 1) ' Thay vì dùng 65536 ta sử dụng Rows.CountLarge
If .Value = "" Then
.End(xlUp).Select ' Tương đương với việc ấn phím Ctrl + ↑
Else
.Select ' Select tới cells cuối chứa dữ liệu trên cột A
End If
End With
End Sub
' Nếu sử dụng Find thì ta có chương trình sau để tìm dòng cuối
Sub LastRowByFind()
Dim r As Range
If Application.ActiveCell Is Nothing Then Exit Sub ' File đang mở mà sheet không active thì thoát
Set r = Columns(ActiveCell.Column).Find(What:="*", After:=Cells(1, ActiveCell.Column), LookIn:=xlValues, SearchDirection:=xlPrevious)
If r Is Nothing Then
Application.Cells(1, ActiveCell.Column).Select ' Select dòng đầu tiên
Else
r.Select
End If
End Sub