Chào các anh em trong diễn đàn,
Mình thường xuyên phải xử lý các bảng dữ liệu lớn trong Excel và hay gặp phải vấn đề với việc đánh số thứ tự. Khi mình lọc dữ liệu theo một điều kiện nào đó, các số thứ tự cũ bị nhảy và không còn liên tục nữa, nhìn rất khó chịu. Đôi khi mình phải tự đánh lại thủ công hoặc dùng các hàm như SUBTOTAL nhưng nó cũng không thật sự tiện lợi.
Gần đây, mình có tìm hiểu và tự viết một đoạn code VBA nhỏ để giải quyết vấn đề này. Code này sẽ giúp tự động đánh lại số thứ tự liên tục cho các hàng dữ liệu hiển thị sau khi lọc, mà không ảnh hưởng đến các hàng đã ẩn.
Đây là đoạn code mình dùng:
Sub AutoNumberVisibleRows()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim i As Long
Set ws = ActiveSheet ' Hoặc chỉ định sheet cụ thể: Set ws = ThisWorkbook.Sheets("Sheet1")
' Giả sử cột số thứ tự là cột A
Set rng = ws.UsedRange.Columns(1)
i = 1
For Each cell In rng.Cells
' Chỉ đánh số nếu hàng đó hiển thị (không bị ẩn)
If Rows(cell.Row).Hidden = False Then
cell.Value = i
i = i + 1
End If
Next cell
End SubCách sử dụng:
- Mở cửa sổ VBA (Alt + F11).
- Insert một Module mới.
- Copy và paste đoạn code trên vào Module.
- Chạy macro bằng cách nhấn F5 hoặc vào View -> Macros -> Chọn Sub AutoNumberVisibleRows -> Run.
Code này sẽ duyệt qua từng ô trong cột đầu tiên (cột A) của vùng dữ liệu sử dụng và chỉ đánh lại số thứ tự cho những hàng đang hiển thị. Các bạn có thể thay đổi ws.UsedRange.Columns(1) thành phạm vi hoặc cột cụ thể mà bạn muốn đánh số thứ tự.
Hy vọng đoạn code này hữu ích cho các bạn nào cũng gặp phải vấn đề tương tự. Nếu có cách nào tối ưu hơn hoặc có thắc mắc gì, mọi người cùng thảo luận nhé!