如何根据其他列的值删除重复行(在Excel中)?

时间:2015-02-13 19:56:08

标签: excel powerbi

上下文: 我有一个包含N行和3列的Excel表:SerialNum,DeviceID和DateTime。 DeviceID是唯一的(因为没有值会重复)。但是,SerialNum和DeviceID之间可能存在1:N关系(因此相同的序列号可能具有多个DeviceID)。我想删除重复的SerialNum值,以便每个SerialNum都有一个关联的DeviceID。

问题: 麻烦的是,对于每组重复的序列号,我想保留其DateTime值是最新的DeviceID(换句话说,最新的)。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

一种选择是测试Column A序列号中的每个项目,以确定该序列号的最高日期/时间。如果序列号的两个条目具有相同的确切日期/时间,则我在使用此方法时看到的唯一真正风险。如果您认为这是一种可能性,您可以测试它,或者可能运行第二个循环以根据您熟悉的规则删除重复的SN。

请参阅以下代码,如果符合您的需求,请告知我们。

Sub RemoveDuplicateSerialNumbersUnlessSerialNumberIsMostRecentDateTimeValue_Dawg()
    Dim nLastRow As Long
    Dim dtMaxDateTime As Date
    Dim strFormula As String

    nLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

    For i = nLastRow To 2 Step -1
        strFormula = "=MAX(IF(A2:A16=" & Cells(i, 1).Address & ",C2:C16))"
        dtMaxDateTime = Evaluate(strFormula)

        If Cells(i, 3).Value = dtMaxDateTime Then
            'Do Nothing Unless You Want TO
        Else
            Rows(i).Delete
        End If
    Next i

End Sub