在Excel中,根据另一列中的值,通过VBA或公式/函数的组合从一列中删除重复项

时间:2016-11-10 07:14:40

标签: excel excel-vba excel-formula excel-2010 vba

我无法以准确,自动的方式实现这一目标。我尝试了所讨论的方法hereherehere,但在我的方案中都没有。

我有一个包含数千行数据的电子表格。数据组织如下:

  • A列包含常规格式
  • 的IP地址
  • B列包含以下自定义格式的日期/时间( d / mm / yyyy h:mm
  • C列包含以下自定义格式的持续时间( h:mm:ss

此数据包含我需要删除的一些重复项,基于A列中的IP地址。但是,我需要的标准是删除最长持续时间的重复项。为了更好地解释我的场景,请参见下面的示例图片:

enter image description here

我需要一种方法来删除不包含该IP地址最长持续时间的特定IP地址的所有重复项。因此,使用上面的示例,第3行将被删除,因为1分钟的持续时间短于包含相同IP地址的第4行中的36分钟。

另一个例子是第5,6和7行也将被删除,因为它们的所有持续时间都比具有相同IP地址但持续时间更长的第8行短。当然,任何已包含唯一IP地址的行都将保持不变。使用我上面的示例的最终结果如下:

enter image description here

当然,在上面的示例中,所有数据都先按IP地址排序,然后按持续时间秒排序。在现实生活中情况并非如此,但如果有必要,我可以在任何解决方案之前做到这一点。

关键是在某些情况下,IP地址可能会重复一次,而在其他情况下,IP地址可能会重复多次。我只需要确保只剩下持续时间最长的那个。如果IP地址的多个实例具有相同的最长持续时间,那么我希望它们全部保留。也就是说,如果一个IP地址重复十次,其中最长的持续时间是两个时间的一小时,那么它们都需要保留。

我很满意任何解决方案,无论是使用公式,函数还是宏。

1 个答案:

答案 0 :(得分:1)

您可以使用辅助列(D列)解决您的任务。

  1. 将以下数组公式插入单元格D2:

    =IF($C2=MAX(IF($A2=$A$2:$A$50,$C$2:$C$50,-1)),"Remain","Remove")

    其中50 - 表格的最后一行

    请记得按Ctrl+Shift+Enter以正确完成数组公式。

  2. 将公式复制/粘贴到其他单元格中。

  3. 通过“删除”值

  4. 过滤到D列
  5. 删除已过滤的行。