2010-08-17 4 views
0

Сначала лист сортируется по столбцу A (номер счета), а затем столбцу C (дата).Excel VBA Script для удаления последних двух повторяющихся записей

У меня есть сценарий, который удаляет повторяющиеся записи и остается последним.

Sub DeleteTheOldies() 
Dim RowNdx As Long 
For RowNdx = Range("a1").End(xlDown).Row To 2 Step -1 
Do While Cells(RowNdx, "a").Value = Cells(RowNdx - 1, "a").Value 
If Cells(RowNdx, "c").Value <= Cells(RowNdx - 1, "c").Value Then 
Rows(RowNdx).Delete 
Else 
Rows(RowNdx - 1).Delete 
End If 
RowNdx = RowNdx - 1 
If RowNdx = 1 Then Exit Sub 
Loop 
Next RowNdx 
End Sub 

Образец данных:

 
Column A  Column B Column C 
751063031 1605621498 03-JUL-10 
751063031 5600003138 18-JUL-10 
751063031 5600084443 17-AUG-10 
754199715 1605621498 27-FEB-10 
754199715 5600084438 17-AUG-10 
757129104 5600084892 12-NOV-09 
757129104 5600084438 17-AUG-10 
757307416 1605621498 27-FEB-10 
757307416 5600084438 17-AUG-10 

Вывод текущего сценария:

 
751063031 5600084443 17-AUG-10 
754199715 5600084438 17-AUG-10 
757129104 5600084438 17-AUG-10 
757307416 5600084438 17-AUG-10 

мне нужна модифицированная версия сценария, чтобы дать ниже вывод (удалить самые последние и остаются остатки)

 
751063031 1605621498 03-JUL-10 
751063031 5600003138 18-JUL-10 
754199715 1605621498 27-FEB-10 
757129104 5600084892 12-NOV-09 
757307416 1605621498 27-FEB-10  
+0

Ваш конечный результат, вероятно, проще выполнить с использованием системы баз данных. – bernie

ответ

0

Попробуйте следующее. Это будет работать с вашим примером выше. Если у вас есть дополнительные ограничения/требования, его, возможно, придется отрегулировать.

Sub NewStuff() 

    Dim RowNdx As Long 
    Dim CurVal As String 

    For RowNdx = 1 To Range("a1").End(xlDown) 

     If Cells(RowNdx, "a").Value = Empty Then 

      Exit For 

     End If 

     If Cells(RowNdx, "a").Value <> Cells(RowNdx + 1, "a").Value Then 

      Rows(RowNdx).Delete 
      RowNdx = RowNdx - 1 

     End If 

    Next RowNdx 

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