如下所示,请仔细阅读。
使用测试ID对某个特定对象进行某些测试,并在下表中生成结果,并且必须根据以下说明的任务来考虑结果
1-Task 1
如果使用不同的测试ID进行相同的测试,例如这里“AAA”已完成三次,那么我应该采用具有最高testid的行。在这里1,2,5分别为“AAA”,我应该只有5行,其余两个我应该删除。
2-任务2
如果多次对相同的测试ID进行相同的测试,我应该考虑结果&在一个列中,它有部分请在这里阅读
- 第1部分:如果结果中的任何一个失败则测试失败,例如这里测试“CCC”,'test id'是2,2&结果通过,分别失败。然后作为testid是相同的,我应该考虑结果,并始终我应该考虑失败的结果,我应该删除已经传递的行。
- 第2部分:如果两个测试结果都通过或失败,那么我应该考虑一个过时的列并考虑最新的一个并删除旧的一个。例如,这里“HHH”测试用testid 6进行两次,并且两次都通过。但它已经在不同的日期15.10.2013& 25.10.2014,所以我必须考虑25.10.2014并删除15.10.2013行。
3.Type3 如果每个值从测试到结果是相同的,那么我需要删除它们中的任何一个。例如这里测试“BBB”。
Tests Datedone Test Id Result
AAA 13.10.2011 1 failed
BBB 13.10.2011 1 passed
CCC 24.10.2011 2 passed
AAA 15.10.2011 2 passed
BBB 13.10.2011 1 passed
CCC 31.12.2015 2 failed
HHH 15.10.2013 6 passed
HHH 25.10.2014 6 passed
AAA 31.10.2015 5 passed
第1,2,3栏是TEST,Datedone& Testid分别代码。这个代码我只在我必须考虑最新结果但不能正常工作时才做了
Sub formattest1consolidate()
'not working
Dim i, j, rangevale, As Long
Dim cell, rng, As range
Sheets("").Activate
rangevale = range("A" & rows.Count).End(xlUp).Row
Set rng = ActiveSheet.UsedRange
For Each cell In range("A2:A" & rangevale)
For i = 1 To rangevale
For j = i + 1 To rangevale
If Cells(i, 1) = Cells(j, 1) And _
Cells(i, 3) = Cells(j, 3) And _
Cells(i, 2) = Cells(j, 2) Then
'do nothing
ElseIf Cells(i, 1) = Cells(j, 1) And _
Cells(i, 3) > Cells(j, 3) Then
rng.Item(j).EntireRow.Delete
ElseIf Cells(i, 1) = Cells(j, 1) And _
Cells(i, 3) < Cells(j, 3) Then
rng.Item(i).EntireRow.Delete
ElseIf Cells(i, 1) = Cells(j, 1) And _
Cells(i, 3) = Cells(j, 3) And _
Cells(i, 2) > Cells(j, 2) Then
rng.Item(j).EntireRow.Delete
ElseIf Cells(i, 1) = Cells(j, 1) And _
Cells(i, 3) = Cells(j, 3) And _
Cells(i, 2) < Cells(j, 2) Then
rng.Item(i).EntireRow.Delete
End If
Next j
Next i
Next cell
End Sub
输出看起来像这样
Tests Datedone Test Id Result
BBB 13.10.2011 1 passed
CCC 31.12.2015 2 failed
HHH 25.10.2014 6 passed
AAA 31.10.2015 5 passed
答案 0 :(得分:1)
您可以在没有VBA的情况下执行此操作。
在表格中设置数据,如下面的屏幕截图所示,然后应用如图所示的排序。排序遵循您的逻辑步骤。
然后排序完成后,删除重复项,如下所示。
您的搜索结果将如下:
如果您希望代码执行此操作,请使用相同的命令,如下所示:
Sub RemoveLines()
Dim wb As Workbook
Set wb = ThisWorkbook
Dim ws As Worksheet
Set ws = wb.Sheets("Sheet1")
With ws
With .Range("A1:D10")
With .Sort
With .SortFields
.Clear
.Add Key:=Range("A2:A10"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("C2:C10"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Add Key:=Range("D2:D10"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("B2:B10"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
End With
.SetRange Range("A1:D10")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
.RemoveDuplicates Columns:=1, Header:=xlYes
End With
End With
End Sub