删除一个单元格中的重复条目

删除一个单元格中的重复条目

我将文献数据库(.txt 格式)中的数据导入 Excel。不幸的是,在大多数情况下,作者会在一个单元格中列出两次,例如:

Smith, Miller, Patty, Smith, Patty, Miller

如您所见,名称的顺序也发生了变化。我想删除第二个重复,以便Smith, Miller, Patty

有人有超酷的快捷方式可以快速完成此操作吗?目前,我正在手动检查每个单元格。(我知道,最好在文献数据库步骤中修复此问题。不幸的是,现在没有这个选项……)。

答案1

Excel 处理拆分功能和唯一或不同功能的方式有点笨拙:拆分是通过“文本到列”完成的,就像在 MS Word 中一样,而唯一/不同是通过高级过滤“仅唯一值”到新列来完成的。

相反,您可以尝试使用以下公式在 Google 表格中修复此问题:

Cell A1: Smith, Miller, Patty, Smith, Patty, Miller

Cell A2: =join(", ",unique(transpose(split(A1,", "))))

Result: Smith, Miller, Patty

Google表格:https://docs.google.com/spreadsheets/d/1A1l0qdnNSHlJB-5DARGKDeIsbuCCLGuoYWm8sR29UTA/edit?usp=sharing

使用逗号分割每个相邻单元格,创建跨多列的单独值。TRANSPOSE 会将其从一行多个值转换为一列多个值。我认为这是 UNIQUE 工作所必需的。最后,JOIN 获取此数组中的唯一(去重)值,并从中创建一个新的逗号分隔字符串。

答案2

您导入的数据可能有错误的分隔符,例如名称之间的逗号。您可以通过创建新列并修剪来解决这个问题。让 Excel 查找第三个逗号,然后删除其后的任何字符。

答案3

您可以使用以下 VBA 代码从分隔列表中删除重复项。

Public Function RemoveDuplicates(list As String, delimiter As String) As String
Dim arrSplit As Variant, i As Long, tmpDict As Object, tmpOutput As String
Set tmpDict = CreateObject("Scripting.Dictionary")
arrSplit = Split(list, delimiter)
For i = LBound(arrSplit) To UBound(arrSplit)
    If Not tmpDict.Exists(arrSplit(i)) Then
        tmpDict.Add arrSplit(i), arrSplit(i)
        tmpOutput = tmpOutput & arrSplit(i) & delimiter
    End If
Next i
If tmpOutput <> "" Then tmpOutput = Left(tmpOutput, Len(tmpOutput) - Len(delimiter))
RemoveDuplicates = tmpOutput
'housekeeping
Set tmpDict = Nothing
End Function

Sub ZapDuplicatesInPlace()
Dim r As Range, va() As Variant
Set r = Application.InputBox("Select range to remove duplicates cell by cell.", "Remove Duplicates From Lists", , , , , , 8)
va = r.Value
For i = LBound(va, 1) To UBound(va, 1)
    For j = LBound(va, 2) To UBound(va, 2)
        'This assumes delimiter is comma followed by space.
        va(i, j) = RemoveDuplicates(CStr(va(i, j)), ", ")
    Next j
Next i
'Print output to sheet
r.Value = va
End Sub

有两种方法可以使用此代码来实现您想要的效果。

  1. 如果您想就地删除重复项,即,如果您想清理现有数据并永久删除重复项,您可以运行该ZapDuplicatesInPlace子程序。它会提示您选择要处理的范围。该范围内的每个单元格都将被删除重复项。

  2. 如果您希望使用工作表函数来保留原始数据,则可以RemoveDuplicates在公式中使用该函数。例如,如果您Smith, Miller, Patty, Smith, Patty, Miller在 A1 中有数据,则可以在另一个单元格中使用下面的公式来返回减去重复项的列表。

    =删除重复项(A1,", ")

有关在工作簿中使用 VBA 的说明,请参阅这个帖子

相关内容