删除重复的行,但保留整个行在特定单元格中具有最高值

时间:2015-07-16 09:58:58

标签: excel-vba duplicates duplicate-removal vba excel

我有一个包含17列的Excel工作表(A列到S列)。列A包含ID号,列C是日期列,列F包含时间格式的值(hh:mm)。对于相同的日期/日,一些ID号在F列中包含两个值 - 通常是高数字(许多小时和分钟)和低数字(几分钟)。如果有这样的重复,我希望从工作表中删除包含F列中的低值的整行。

我尝试使用Excel的“板载”删除重复功能,但它没有做到这一点。然后我遇到了这段VBA代码,删除了包含最高值的整个重复行:

select "Device nr" from (select "Device nr", count(*) as OKcount from Table1
where (I1>19 and I2<11) and state="on"
group by "Device nr") where OKcount = 3

我不完全确定我理解这背后的逻辑,但我猜这可以作为一个起点(反转逻辑并添加一个新的限制(如果在同一天)。如果我改变了从上升到下降的订单,需要取最高值。但我不确定如何将额外的限制(日限制)放入。

THX!

1 个答案:

答案 0 :(得分:0)

在这里,我的解决方法是:

Public Sub deleteDuplicate()

    Dim row As Integer

    'Set the start row
    row = 2

    With Sheets("sheetname")

        'Loop until ID cell is blank
        Do While .Range("A" & row) <> ""

            innerRow = 1

            'Re-loop until ID cell is blank for checking
            Do While .Range("A" & innerRow) <> ""

                'If ID and date are equal
                If row <> innerRow And .Range("A" & row) = .Range("A" & innerRow) And .Range("C" & row) = .Range("C" & innerRow) Then

                    If .Range("F" & row) < .Range("F" & innerRow) Then

                        .Rows(row).Delete

                        row = row - 1

                        Exit Do

                    Else

                        .Rows(innerRow).Delete

                    End If

                End If

                'Increase inner looping row
                innerRow = innerRow + 1

            Loop

            'Increase row
            row = row + 1

        Loop

    End With

End Sub