Как вы можете видеть ниже, пожалуйста, внимательно прочитайте.VBA - удалить строки сложным сравнением между значениями в разных столбцах на условиях?
Некоторые тесты выполняются на конкретном объекте с тестовыми идентификаторами, datedone и результаты в приведенной ниже таблице и рассмотрения результатов должно быть сделано на основе ниже объяснены задачи
1-Задача 1
если тот же тест выполняется с помощью другого идентификатора теста, например, здесь «AAA» выполнил три раза, тогда я должен взять строку с самым высоким testid. среди здесь 1,2,5 соответственно для «AAA», я должен иметь только строку с 5 и оставшиеся две, которые я должен удалить.
2 Задача 2
если же тест проводится для таких же идентификатор теста несколько раз я должен учитывать datedone столбцы результата &, он части, пожалуйста, читайте здесь
- часть 1: если один из результатов не удался, тогда тест не удался, например, здесь для теста «CCC» «идентификатор теста» равен 2,2 & результат передан, не удалось соответственно. то, поскольку testid - то же самое, я должен рассмотреть результат и всегда неудачный результат, который должен рассмотреть, и я должен удалить строку, которая прошла в нем.
--part 2: Если оба теста были пройдены или провалились, я должен рассмотреть столбец dateone и рассмотреть тот, который является последним, и удалить более старый. например, здесь тест «HHH» выполняется дважды с помощью testid 6 и оба раза, когда он проходил. но это было сделано на разных датах 15.10.2013 & 25.10.2014, поэтому я должен рассмотреть 25.10.2014 и удалить строку с 15.10.2013.
3.Type 3 Если каждое значение совпадает с результатами тестов, то мне нужно удалить любой из них. Например, здесь тесты «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 являются ТЕСТ, 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
В чем вопрос? –
Пожалуйста, по крайней мере отформатируйте свой код, чтобы его можно было прочитать, я не могу заставить себя следовать этому блоку 'If/ElseIf'. Также 'но не работает должным образом anyways' - что не работает? Этот вопрос совершенно неясен. –
Я сделаю это со следующего раза, так как я постарался изо всех сил, чтобы все было ясно. может быть, я должен думать с другой точки зрения также – subha