Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除基于另一列的重复行(在Excel中)';s的价值观?_Excel_Powerbi - Fatal编程技术网

如何删除基于另一列的重复行(在Excel中)';s的价值观?

如何删除基于另一列的重复行(在Excel中)';s的价值观?,excel,powerbi,Excel,Powerbi,上下文: 我有一个包含N行和3列的Excel表:SerialNum、DeviceID和DateTime。DeviceID是唯一的(因为在中没有重复的值)。但是,SerialNum和DeviceID之间可能存在1:N关系(因此同一序列号可能有多个DeviceID)。我想删除重复的SerialNum值,以便每个SerialNum都有一个关联的DeviceID 问题: 问题在于,对于每组重复的序列号,我希望保留DateTime值为最新(换句话说,最新)的DeviceID。有没有办法做到这一点?一个选项

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

问题
问题在于,对于每组重复的序列号,我希望保留DateTime值为最新(换句话说,最新)的DeviceID。有没有办法做到这一点?

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

请参阅下面的代码,并让我知道它是否满足您的需要

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

@pnuts如果我排序,我如何知道哪些重复项将被删除?例如,如果我按升序排序,是否会删除重复项,并为每个序列号保留第一行,最后一行,另一行?我没有看到文档指定Excel删除哪些重复项。