删除重复的文本值(Microsoft Excel)
每个人一次或两次都需要从文本条目列表中删除重复的条目。假设您在工作表的A列中有文本值,它们运行约500行。如果要删除列表中的所有重复项,则可能正在寻找最简单的方法。实际上,可以通过多种方法在Excel中完成此任务。
使用删除重复工具
也许最简单的方法是选择要从中删除重复项的数据,然后显示功能区的“数据”选项卡。单击“数据工具”组中的“删除重复项”工具。 Excel将显示“删除重复项”对话框。
“删除重复项”对话框的妙处在于,它列出了数据中每一列的名称。 (该工具假定您在数据的第一行中具有标题标签。)然后,可以确保要检查重复项的每一列旁边都有一个复选标记。当您单击确定按钮时,将分析您的数据并删除重复的行。 (同样,重复项是根据“删除重复项”对话框中选择的列确定的。)
使用数据过滤
另一种手动方法是使用数据过滤来确定唯一值。确保该列顶部有一个标签,然后在该列中选择一个单元格。显示功能区的“数据”选项卡,然后在“排序和筛选”组中单击“高级”。使用结果对话框中的控件来指定您要将唯一值复制到您指定的另一个位置。
使用公式
您也可以使用公式手动确定列表中的重复项。对列中的值进行排序,然后在单元格B2中输入以下公式:
=IF(A2=A1,"Duplicate","")
将公式向下复制到B列中所有在A列中具有相应值的单元格。选择B列中的所有值,然后按Ctrl + C。使用“选择性粘贴”仅将值粘贴到相同的所选单元格中。现在,您已将公式转换为结果。
根据B列的内容对两列进行排序,所有重复的行都将在一个区域中。删除这些行,您便获得了唯一值的完整列表。
使用宏
手动方法快速简便,但是,如果您通常必须从列中删除重复的值,则宏可能更适合您。
下面的宏依赖于数据过滤,就像早期的手动方法一样:
Sub CreateUniqueList() Dim rData As Range Dim rTemp As Range Set rData = Range(Range("a1"), Range("A1048576").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
宏将创建一个临时列,使用高级过滤将唯一值复制到该列,然后删除原始数据列。
结果只是A列中的唯一值。如果您不希望宏使用Excel的数据筛选功能,则以下更短的宏将达到目的:
Sub RemoveDups() Dim rData As Range Set rData = Range(Range("a1"), Range("A1048576").End(xlUp)) rData.RemoveDuplicates Columns:=Array(1), Header:=xlYes End Sub
此宏中的键使用RemoveDuplicates方法,该方法依赖于包含要检查重复项的列号的数组。此处显示的宏仅对列A的内容起作用,但是您可以轻松地对其进行修改,以处理多个列中的数据。您需要做的就是更改rData使其代表更大的数据区域,然后修改columns参数,使其指向要检查的列:
rData.RemoveDuplicates Columns:=Array(1,4), Header:=xlYes
另一种基于宏的方法是以这种方式开发您自己的代码来检查数据集中的值:
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
宏在调用之前对您所做的选择起作用。因此,如果您需要从A2:A974范围中删除重复的单元格,只需选择该范围,然后运行宏即可。宏完成后,将删除重复的单元格以及所有空白单元格。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(12711)适用于Office 365中的Microsoft Excel 2007、2010、2013、2016、2019和Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: