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: