Sắp xếp dữ liệu chứa các ô đã hợp nhất (Microsoft Excel)
Excel từ lâu đã bao gồm khả năng hợp nhất các ô liền kề thành một ô lớn hơn, đơn lẻ. Khả năng này đã được sử dụng bởi nhiều nhà thiết kế trang tính để tạo cho trang tính của họ một cái nhìn bóng bẩy, chuyên nghiệp.
Tuy nhiên, có một nhược điểm lớn khi sử dụng các ô đã hợp nhất: Bạn không thể sắp xếp các bảng bao gồm chúng. Nếu cố gắng, bạn sẽ nhận được thông báo “Thao tác này yêu cầu các ô đã hợp nhất phải có kích thước giống hệt nhau.”
Giải pháp rõ ràng nhất cho vấn đề là không sử dụng các ô đã hợp nhất.
Ví dụ: giả sử bạn có một trang tính trong đó mỗi “bản ghi” thực sự bao gồm hai hàng và cột đầu tiên của trang tính chứa các ô đã hợp nhất. (Mỗi bản ghi hai hàng bắt đầu bằng hai ô được hợp nhất trải dài hai hàng. Ô được hợp nhất này chứa tên dự án.)
Tốt hơn là hủy hợp nhất các ô trong cột đầu tiên, nhưng sau đó bạn có thể tự hỏi làm thế nào để các bản ghi được sắp xếp đúng cách trong trang tính; cách giữ các cặp hàng với nhau trong quá trình sắp xếp. Bạn có thể thực hiện việc này bằng cách đặt tên dự án của mình ở hàng đầu tiên và tên dự án được nối bằng “zz” ở hàng thứ hai. Ví dụ: nếu hàng đầu tiên chứa “Wilburn Chemical” (tên dự án), thì hàng thứ hai có thể chứa “Wilburn Chemicalzz”. Định dạng ô của hàng thứ hai để tên không hiển thị (chẳng hạn như văn bản màu trắng trên nền trắng), và sau đó bạn có thể sắp xếp thành công theo ý muốn.
Một giải pháp khác là sử dụng macro để sắp xếp trang tính của bạn và hoàn thành việc sắp xếp. Giả sử rằng các ô đã hợp nhất nằm trong cột A (như đã mô tả trước đó), bạn có thể sử dụng macro sau để sắp xếp dữ liệu theo nội dung của cột A:
Sub SortList() Dim sAddStart As String Dim rng As Range Dim rng2 As Range Dim lRows As Long Application.ScreenUpdating = False sAddStart = Selection.Address Set rng = Range("A1").CurrentRegion With rng lRows = .Rows.Count - 1 .Cells(1).EntireColumn.Insert .Cells(1).Offset(0, -1) = "Temp" .Cells(1).Offset(1, -1).FormulaR1C1 = _ "=+RC[1]&"" ""&ROW()" .Cells(1).Offset(2, -1).FormulaR1C1 = _ "=+R[-1]C[1]&"" ""&ROW()" Set rng2 = .Cells(1).Offset(1, -1).Resize(lRows, 1) Range(.Cells(2, 0), .Cells(3, 0)).AutoFill _ Destination:=rng2 rng2.Copy rng2.PasteSpecial Paste:=xlValues .Columns(1).MergeCells = False .CurrentRegion.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom rng2.EntireColumn.Delete With Range(.Cells(2, 1), .Cells(3, 1)) .Merge .Copy .Cells(3, 1).Resize(lRows - 2, 1). _ PasteSpecial Paste:=xlFormats End With End With Application.CutCopyMode = False Range(sAddStart).Select Application.ScreenUpdating = True End Sub
Macro chèn một cột tạm thời, đọc các mục từ cột đầu tiên của danh sách, nối số hàng, sao chép nó xuống cột tạm thời, hủy hợp nhất các ô, sắp xếp danh sách, xóa cột tạm thời và hợp nhất lại cột A. (Thật là nhiều công việc chỉ để sắp xếp một bảng với các ô hợp nhất!)
Macro này rất cụ thể cho một bố cục dữ liệu cụ thể của bạn và do đó cần phải được kiểm tra và có thể được sửa đổi để đảm bảo rằng nó sẽ hoạt động với dữ liệu được định dạng theo bất kỳ cách nào khác.
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (761) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: