Dror的工作表包含很多数据。一列中的数据可能与另一列中的数据完全相同,因此他想知道是否存在一种简便的方法来删除工作表中的所有重复列。

当然,第一步是弄清楚两列是否相同。可以使用如下数组公式轻松确定:

=AND(A1:A100=B1:B100)

(请记住,使用Shift + Ctrl + Enter输入了数组公式。)

该公式将比较列A和B的前100行中的所有值。如果它们都相同,则该公式返回TRUE。如果任何一个单元格都不匹配,则该公式返回FALSE。如果结果为TRUE,则可以删除其中一列,因为它们相同。

如果您想要一些更自动的东西,这意味着删除了重复的列,那么您将需要使用宏。下面的步骤逐步浏览工作表中的所有列,并从最右边的列开始,比较所有列。如果它们相同(不管它们在工作表中的顺序如何),那么宏会询问您是否要删除重复的列。

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

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(7164)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: