2015-11-19 1 views
0

Как вы можете видеть ниже, пожалуйста, внимательно прочитайте.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  
+1

В чем вопрос? –

+0

Пожалуйста, по крайней мере отформатируйте свой код, чтобы его можно было прочитать, я не могу заставить себя следовать этому блоку 'If/ElseIf'. Также 'но не работает должным образом anyways' - что не работает? Этот вопрос совершенно неясен. –

+0

Я сделаю это со следующего раза, так как я постарался изо всех сил, чтобы все было ясно. может быть, я должен думать с другой точки зрения также – subha

ответ

1

Вы можете сделать это без VBA.

Настройте свои данные в таблице, как на скриншоте ниже, затем примените сортировку, как показано. Сортировка следует за вашими логическими шагами.

enter image description here

Тогда как только то завершена удалить дубликаты, как показано здесь.

enter image description here

Ваши результаты будут в конечном итоге, как это:

enter image description here

Если вы хотели бы код, чтобы сделать это, используя эти же команды, это ниже:

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 
+0

Спасибо Скотту, у него есть некоторые ошибки, но это было решение, что я искал, и я успешно отсортировал данные соответствующим образом. – subha

+0

отличная @subha. если это было решение, которое вы искали, отметьте как ответ –

Смежные вопросы