Các cách tìm dòng cuối của dữ liệu trong Excel bằng VBA
Việc tìm dòng cuối cùng có chứa dữ liệu trong Excel với VBA tưởng chừng như một việc dễ làm. Nhưng thực ra lại khá phức tạp. Trong bài viết này, chúng ta sẽ cùng nhau xem việc này phức tạp tới mức nào. Đầu tiên, để làm sáng tỏ vấn đề thì chúng ta cần định nghĩa thống nhất với nhau khái niệm ...
Việc tìm dòng cuối cùng có chứa dữ liệu trong Excel với VBA tưởng chừng như một việc dễ làm. Nhưng thực ra lại khá phức tạp. Trong bài viết này, chúng ta sẽ cùng nhau xem việc này phức tạp tới mức nào.
Đầu tiên, để làm sáng tỏ vấn đề thì chúng ta cần định nghĩa thống nhất với nhau khái niệm “dòng cuối”:
- Dòng mà Excel coi là dòng cuối cùng trong vùng đang sử dụng
- Dòng cuối cùng trong một vùng Excel có chứa dữ liệu
- Dòng cuối cùng trong một bảng Excel có chứa dữ liệu
- Dòng cuối cùng có chứa dữ liệu và không bị ẩn
Sau đây là các phương pháp chúng ta có thể dùng để tìm dòng cuối cùng:
Tìm dòng cuối với Used Range
Mỗi sheet trên Excel là một bảng có kích thước 16384 cột x 1048576 dòng. Với bảng này, khi mới được tạo ra, thì các ô chưa được sử dụng, với mỗi ô chúng ta đã lưu dữ liệu, lưu công thức, định dạng thì Excel coi nhưng ô đó đã được sử dụng – Used Range.
Với cách sử dụng Used Range, chúng ta có 2 cách để tìm được dòng cuối cùng như sau:
Tìm dòng cuối với xlUp và xlDown
Với cách này, chúng ta mô phỏng phím tắt CTRL + UP hoặc CTRL + DOWN khi làm việc với vùng dữ liệu trong Excel. Đặc điểm của cách này là bỏ qua dòng ẩn, nhưng sẽ dừng lại ở trước một ô trống của cột đang xử lý
Cách này sẽ đưa ra kết quả khác khi áp dụng với đối tượng bảng (Table) trong Excel, vì không bỏ qua dòng bị ẩn
Cách tìm dòng cuối sử dụng Range.Find
Kết quả trả về của từng dòng code như sau:
- jLastRangeData trả về 25
- jLastVisibleRangeData trả về 20
- jLastTableData trả về 25
- jLastVisibleTableData trả về 20
Cách tìm dòng cuối sử dụng COUNT
Đôi khi việc tính toán để tìm ra dòng cuối sẽ đem đến cho chúng ta kết quả chính xác và nhanh chóng hơn bằng cách đếm số dòng đã dùng, cộng với vị trí dòng bằng đầu và trừ đi 1: