Xóa giá trị văn bản trùng lặp (Microsoft Excel)
Mọi người đều có nhu cầu lúc này hay lúc khác — xóa các mục trùng lặp khỏi danh sách các mục nhập văn bản. Giả sử bạn có các giá trị văn bản trong cột A của một trang tính và chúng chạy trong khoảng 500 hàng. Nếu bạn muốn xóa bất kỳ bản sao nào trong danh sách, bạn có thể đang tìm cách dễ nhất để thực hiện.
Theo cách thủ công, bạn có thể sử dụng tính năng lọc dữ liệu để xác định các giá trị duy nhất.
Đảm bảo cột có nhãn ở trên cùng, sau đó chọn một ô trong cột. Chọn dữ liệu | Bộ lọc | Bộ lọc Nâng cao hoặc, trong Excel 2007, hiển thị tab Dữ liệu của dải băng và bấm Nâng cao trong nhóm Sắp xếp & Bộ lọc. Sử dụng các điều khiển trong hộp thoại kết quả để chỉ định rằng bạn muốn sao chép các giá trị duy nhất vào một vị trí khác mà bạn chỉ định.
Bạn cũng có thể sử dụng công thức để xác định thủ công các bản sao trong danh sách. Sắp xếp các giá trị trong cột, rồi nhập công thức sau vào ô B2:
=IF(A2=A1,"Duplicate","")
Sao chép công thức xuống tất cả các ô trong cột B có giá trị tương ứng trong cột A. Chọn tất cả các giá trị trong cột B và nhấn Ctrl + C. Sử dụng hộp thoại Dán Đặc biệt để chỉ dán các giá trị vào cùng các ô đã chọn. Bây giờ bạn đã chuyển đổi các công thức thành kết quả của chúng. Sắp xếp hai cột theo nội dung của cột B và tất cả các hàng trùng lặp của bạn sẽ nằm trong một khu vực. Xóa các hàng này và bạn có danh sách các giá trị duy nhất đã hoàn thành.
Một trong hai cách tiếp cận thủ công này đều nhanh chóng và dễ dàng, nhưng nếu bạn thường xuyên phải xóa các giá trị trùng lặp khỏi một cột, thì macro có thể phù hợp với phong cách của bạn hơn. Macro sau dựa vào tính năng lọc dữ liệu nâng cao, giống như phương pháp thủ công trước đó:
Sub CreateUniqueList() Dim rData As Range Dim rTemp As Range Set rData = Range(Range("a1"), Range("A65536").End(xlUp)) rData.EntireColumn.Insert Set rTemp = rData.Offset(0, -1) rData.AdvancedFilter _ Action:=xlFilterCopy, _ CopyToRange:=rTemp, _ Unique:=True rTemp.EntireColumn.Copy _ rData.EntireColumn Application.CutCopyMode = False rTemp.EntireColumn.Delete Set rData = Nothing Set rTemp = Nothing End Sub
Macro tạo một cột tạm thời, sử dụng tính năng lọc nâng cao để sao chép các giá trị duy nhất vào cột đó, sau đó xóa cột dữ liệu gốc.
Kết quả chỉ là các giá trị duy nhất trong cột A. Nếu bạn không muốn macro của mình sử dụng tính năng lọc dữ liệu của Excel, thì macro sau sẽ thực hiện thủ thuật:
Sub DelDups() Dim rngSrc As Range Dim NumRows As Integer Dim ThisRow As Integer Dim ThatRow As Integer Dim ThisCol As Integer Dim J As Integer, K As Integer Application.ScreenUpdating = False Set rngSrc = ActiveSheet.Range(ActiveWindow.Selection.Address) NumRows = rngSrc.Rows.Count ThisRow = rngSrc.Row ThatRow = ThisRow + NumRows - 1 ThisCol = rngSrc.Column 'Start wiping out duplicates For J = ThisRow To (ThatRow - 1) If Cells(J, ThisCol) > "" Then For K = (J + 1) To ThatRow If Cells(J, ThisCol) = Cells(K, ThisCol) Then Cells(K, ThisCol) = "" End If Next K End If Next J 'Remove cells that are empty For J = ThatRow To ThisRow Step -1 If Cells(J, ThisCol) = "" Then Cells(J, ThisCol).Delete xlShiftUp End If Next J Application.ScreenUpdating = True End Sub
Macro hoạt động trên một lựa chọn bạn thực hiện trước khi gọi nó. Do đó, nếu bạn cần loại bỏ các ô trùng lặp khỏi phạm vi A2: A974, chỉ cần chọn phạm vi đó và sau đó chạy macro. Khi macro hoàn tất, các ô trùng lặp sẽ bị loại bỏ, cũng như bất kỳ ô trống nào.
_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 (2430) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: