如何通过在多列中相互比较值来删除特定行?

时间:2015-11-19 09:46:27

标签: excel vba excel-vba

正如您在下面所见,我想删除重复执行的测试,但必须通过比较测试ID和datedone来保留一个结果。例如,如果您参加测试“AAA”,它已经完成了三次,所以我想消除两个基于测试ID和过时的内容。它已分别用1,2,5个测试ID完成,所以我想保留最新的5个并消除1和2.但在某些情况下,测试ID也是相同的,然后我需要比较过时的。例如“CCC”测试分别测试2,2,但是测试日期分别为2011年10月24日和2015年12月31日。因为我想要保留最新的,我需要消除24.10.2015。我尝试了一个代码(下面的例子),但它没有正常工作j的值,即使删除了一行,每次删除东西时sikp两行,我也会连续更新。请帮助我,我坚持了很久 -

C:\Program Files (x86)\BlueStacks

第1,2,3栏是TEST,Datedone& Testid分别代码

Tests    Datedone    Test Id      Result

AAA     13.10.2011      1         passed

BBB     13.10.2011      1         passed

CCC     24.10.2011      2         passed

AAA     15.10.2011      2         passed

DDD     31.12.2014      3         passed

CCC     31.12.2015      2         passed

GGG     15.10.2013      5         passed

HHH     25.10.2014      6         passed

AAA     31.12.2015      5         passed

1 个答案:

答案 0 :(得分:0)

试试这个

Public Sub DeleteRepeats()
Const FORMULA_REPEATS As String = _
"=IF(COUNTIFS($A$2:$A$<lastrow>,A2,$C$2:$C$<lastrow>,C2)=1," & _
    "MAX(IF($A$2:$A$<lastrow>=A2,$C$2:$C$<lastrow>))=C2," & _
    "MAX(IF(($A$2:$A$<lastrow>=A2)*($C$2:$C$<lastrow>=C2),$B$2:$B$<lastrow>))=B2)"
Dim rng As Range
Dim lastrow As Long


    With ActiveSheet

        lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
        .Columns("E").Insert
        .Range("E1").Value = "tmp"
        .Range("E2").FormulaArray = Replace(FORMULA_REPEATS, "<lastrow>", lastrow)
        .Range("E2").AutoFill .Range("E2").Resize(lastrow - 1)
        Set rng = .Range("A2").Resize(lastrow - 1)
        .Range("A1:E1").AutoFilter Field:=5, Criteria1:="FALSE"
        On Error Resume Next
        Set rng = rng.SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
        If Not rng Is Nothing Then rng.EntireRow.Delete

        .Columns("E").Delete
    End With
End Sub