根据列中的最大值有条件地删除Excel中的重复项

时间:2015-04-20 10:27:25

标签: excel duplicates filtering conditional-statements

我在Excel中有一个2列数据,如下所示: 第一列是值,第二列包含相应的单词。但是,我想删除此数据集中的行,以便最后,对于第二列中的每个唯一字,只保留一行,第一列中的值对于该字最大,甚至删除那些行每个唯一单词的最大值的副本,并为每个唯一单词留下一行。

2   cat
2   cat
1   cat
3   dog
2   dog
1   dog
2   milk
1   milk
2   juice
1   juice

列首先由第2列排序(因此单词按字母顺序排列:AZ),其次是第1列(从最大到最小,因此最大值始终是每个单词的第一个值)。

我一直在尝试使用Excel for Mac 2011中的advanced filtering来执行此操作,但我似乎无法包含删除所有重复条目的条件,但条目1中具有最大值的条目除外。< / p>

所需的输出如下:

2   cat
3   dog
2   milk
2   juice

我一直在根据查询conditionally removing duplicatesherehere搜索答案,但是所提供的每个解决方案似乎都基于布尔条件(即有信息)或者没有),并且没有确定哪个值是最大的值作为删除副本的条件。

关于如何解决这个问题的任何想法?

3 个答案:

答案 0 :(得分:2)

如果您不想使用VBA,可以试试这个:

选择表格,然后从HOME -> Sort & Filter选择Custom Sort

首先按wordorder : A to Z然后Add Level排序,然后按valueorder: Smallest to Largest排序。

使用以下公式创建列Key(我假设您的数据包含标题并从单元格A1开始。然后在单元格C2中输入公式=IF(B2<>B3,0,1)和复制下来。

然后复制并粘贴特殊值列C,并对列Key Descending进行排序或对1

进行过滤

最后,复制已过滤的表格并将其粘贴到其他位置,然后选择全部并Data -> Remove Duplicates完成。或者你可以先完成最后一部分然后再执行上述步骤。

答案 1 :(得分:1)

试试这个短宏:

Sub SaveTheFirstItem()
    Dim N As Long, i As Long

    N = Cells(Rows.Count, 1).End(xlUp).Row
    For i = N To 2 Step -1
        If Cells(i, 2) = Cells(i - 1, 2) Then
            Cells(i, 2).EntireRow.Delete
        End If
    Next i
End Sub

宏非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要使用Excel中的宏:

      1. ALT-F8
      2. 选择宏
      3. 触碰RUN
      4. 要了解有关宏的更多信息,请参阅:

        http://www.mvps.org/dmcritchie/excel/getstarted.htm

        http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

        必须启用宏才能使其生效!

答案 2 :(得分:1)

如果您设置了包含多个列的日期,当您从特定列(即cat,dog等)中删除重复项时(它还会删除该数据选择的整行),删除重复功能会保留第一个在列中复制并删除其余部分。 (这假设您已为要从中删除重复项的列对数据集a-z进行了排序)。因此,如果首先使用重复列将数据集排序为AZ,则添加一个值为“最高 - 最低”的值列,然后当您自动删除重复项时,可以保留具有最高值的副本并删除其他的。不幸的是,这是一个专门针对您的情况的方案。我不知道有条件删除会有更多选择的任何其他方法。