2010-08-17 4 views
0

La feuille de calcul est triée en fonction de la colonne A (numéro de compte) d'abord, puis de la colonne C (date).Script VBA Excel pour supprimer le plus récent des enregistrements en double

J'ai ci-dessous le script qui supprime les enregistrements en double et reste le plus récent.

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 

données de l'échantillon:

 
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 

sortie du script courant:

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

je besoin d'une version modifiée du script pour donner la sortie ci-dessous (supprimer les plus récentes et demeurent les repos)

 
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

Votre résultat final est probablement plus facile à obtenir en utilisant un système de base de données. – bernie

Répondre

0

Essayez ce qui suit. Cela fonctionnera avec votre exemple ci-dessus. Si vous avez des contraintes/exigences supplémentaires, vous devrez peut-être l'ajuster.

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 
Questions connexes