Chức năng Table Data là một chức năng rất hay trong Excel, tuy nhiên nó cũng đem lại nhiều yêu cầu phức tạp hơn khi sử dụng. Một trong số đó là việc sử dụng VBA trên bảng Table Data.
Trong bài học này chúng ta cùng tìm hiểu việc sử dụng VBA để tìm dòng cuối cùng có chứa dữ liệu trong Table Data.
Ví dụ: chúng ta có bảng dữ liệu như sau:
Để chuyển bảng này về dạng Table Data thì chúng ta chọn toàn bộ bảng, sau đó chọn Insert>Table> Trong bảng Create Table thì bạn chú ý đánh thêm dấu chọn vào ô My table has headers (Bảng có bao gồm tiêu đề) => Bấm OK
Bây giờ chúng ta cùng tìm hiểu một vài ứng dụng VBA tìm dòng cuối để xem nó hoạt động thế nào trong môi trường VBA
1. Phương pháp End(xlUp) thông thường
Đây là phương pháp khá thông dụng trong VBA để tìm dòng cuối của 1 vùng dữ liệu.
Cách viết thường gặp là:
Tên Sheet.Cells(Rows.Count, Số cột).End(xlUp).Row
- Tên Sheet: Bạn muốn làm việc tại sheet nào thì sử dụng tên sheet đó
- Rows.count: Đếm số hàng
- Số cột: Bạn muốn đếm trong cột nào thì sử dụng số cột đó
- End(xlUp).Row : tính từ toàn bộ bảng số dòng của bảng tính tính ngược lên phía trên tới dòng gần nhất có chứa dữ liệu
Kiểm tra cách viết này với Table Data như sau:
Chúng ta có được kết quả là dòng thứ 13
Nhưng khi xóa bớt 1 vài dữ liệu trong bảng Table, ví dụ như xóa dữ liệu tại dòng 11, 12, 13 thì kết quả vẫn ra 13
=> Việc ghi nhận dòng cuối theo cách này được hiểu là tới dòng cuối của bảng Table đang áp dụng, không phụ thuộc phía trong nó có dữ liệu hay không
2. Phương pháp End(xlUp) / End(xlDown) dùng riêng với Table
Đặt tên Table ví dụ của chúng ta là TableTest
Trong cách viết dùng riêng với Table, chúng ta có thể sử dụng cách viết:
Tên sheet.Range(“Tên table”).End(xlUp).Row
Tên sheet.Range(“Tên table”).End(xlDown).Row
Chúng ta cùng kiểm tra kết quả của từng trường hợp:
Cách sử dụng End(xlUp) cho chúng ta kết quả = 2
Cách sử dụng End(xlDown) cho chúng ta kết quả = 10
Như vậy chúng ta có thể thấy cách sử dụng xlDown sẽ cho chúng ta đúng dòng cuối cần tìm trong Table
Ngay cả khi có dữ liệu bên ngoài table thì vẫn cho ra kết quả là dòng cuối trong Table, bởi câu lệnh trên chỉ xét trong vùng bảng Table
Tuy nhiên nếu dòng cuối có chứa dữ liệu bị ẩn đi (chức năng Hide Row) thì câu lệnh trên sẽ không tính với các dòng bị ẩn, và nếu có dòng trống nằm xen giữa các nội dung trong bảng thì cách này chỉ tìm đến vị trí dòng trống xen giữa đó mà thôi.
3. Phương pháp Range.Find
Đây là phương pháp được những người có nhiều kinh nghiệm sử dụng VBA ưa thích, bởi nó khắc phục được hầu hết các nhược điểm của các phương pháp tìm dòng cuối khác:
- Có dòng trống xen kẽ ở trong bảng
- Dòng cuối có chứa công thức nhưng kết quả là rỗng
Trong hình trên, ở 2 ô C4 và C5 đã áp dụng cách sử dụng tìm dòng cuối theo phương pháp Range.Find
C4: Tìm giá trị khác rỗng trong bảng TableTest, đối tượng tìm kiếm là Value
C5: Tìm giá trị khác rỗng trong bảng TableTest, đối tượng tìm kiếm là Formulas, tính cả ô chứa công thức mà bằng rỗng
Mặc dù phương pháp này khá dài nhưng nó giúp chúng ta khắc phục được nhiều nhược điểm hay gặp, giúp làm việc trên Table Data một cách hiệu quả hơn.
30 Th9 2020
1 Th10 2020
1 Th10 2020
1 Th10 2020
1 Th10 2020
1 Th10 2020