Dror có một trang tính chứa khá nhiều dữ liệu. Có thể dữ liệu trong một cột sẽ giống hoàn toàn với dữ liệu trong một cột khác, vì vậy anh ấy tự hỏi liệu có cách nào dễ dàng để xóa bất kỳ cột trùng lặp nào trong trang tính không.

Bước đầu tiên, tất nhiên, là tìm hiểu xem hai cột có giống nhau hay không. Điều này có thể được xác định khá dễ dàng với một công thức mảng như sau:

=AND(A1:A100=B1:B100)

(Hãy nhớ rằng công thức mảng được nhập bằng cách sử dụng Shift + Ctrl + Enter.)

Công thức so sánh tất cả các giá trị trong 100 hàng đầu tiên của cột A và B. Nếu chúng đều giống nhau, thì công thức trả về TRUE. Nếu bất kỳ ô nào không khớp, thì công thức trả về FALSE. Nếu kết quả là TRUE thì bạn có thể xóa một trong các cột vì chúng giống nhau.

Nếu bạn muốn thứ gì đó tự động hơn một chút, nghĩa là cột trùng lặp sẽ bị xóa, thì bạn sẽ cần sử dụng macro. Các bước sau qua tất cả các cột trong trang tính và bắt đầu với cột ngoài cùng bên phải, so sánh tất cả các cột. Nếu bất kỳ cột nào giống nhau — bất kể thứ tự của chúng trong trang tính — thì macro sẽ hỏi bạn có muốn xóa cột trùng lặp hay không.

Sub DeleteDuplicateColumns()

Dim rngData As Range     Dim arr1, arr2     Dim i As Integer, j As Integer, n As Integer

On Error Resume Next     Set rngData = ActiveSheet.UsedRange     If rngData Is Nothing Then Exit Sub

n = rngData.Columns.Count

For i = n To 2 Step -1         For j = i - 1 To 1 Step -1             If WorksheetFunction.CountA(rngData.Columns(i)) <> 0 And _               WorksheetFunction.CountA(rngData.Columns(j)) <> 0 Then                 arr1 = rngData.Columns(i)

arr2 = rngData.Columns(j)

If AreEqualArr(arr1, arr2) Then                     With rngData.Columns(j)

'mark column to be deleted                         .Copy                         If MsgBox("Delete marked column?", vbYesNo) _                           = vbYes Then                             rngData.Columns(j).Delete                         Else                             'remove mark                             Application.CutCopyMode = False                         End If                     End With                 End If             End If         Next j     Next i

End Sub
Function AreEqualArr(arr1, arr2) As Boolean     Dim i As Long, n As Long     AreEqualArr = False     For n = LBound(arr1) To UBound(arr1)

If arr1(n, 1) <> arr2(n, 1) Then             Exit Function         End If     Next n     AreEqualArr = True End Function

_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 (5674) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: