2016-10-03 3 views
0

Angenommen, ich habe eine Tabelle mit 4 Spalten: Id (col23), Gruppe (Spalte 5), Option (col24) & Wert (Spalte 12). Dies ist ein vereinfachtes Beispiel und die Spaltennummern sind die Zahlen in meiner tatsächlichen Tabelle. Was ich versuche zu tun ist, doppelte Zeilen zu entfernen, wenn es mehr als eine Zeile mit der gleichen ID in der ID-Spalte gibt. Dieses Bit arbeitet mit dem folgenden Code:Duplizieren in VBA

Sub data() 

Dim LastRow As Long 
Dim i As Long 

LastRow = Cells(Rows.Count, "C").End(xlUp).Row 

For i = LastRow To 2 Step -1 

    If Cells(i, 12).Value < Application.Evaluate("MAX(IF(" & Range(Cells(1, 23), Cells(LastRow, 23)).Address _ 
      & "=" & Cells(i, 23).Address & "," & Range(Cells(1, 12), Cells(LastRow, 12)).Address & "))") Then 

     Rows(i).Delete 

    End If 

Next i 

End Sub 

Allerdings bemerkte ich einige Aufzeichnungen, dass die ID gleich ist und auch der Wert ist gleich. Das bedeutet, dass ich ein paar Duplikate übrig habe. Um diese loszuwerden, möchte ich auch einen Test durchführen, um zu vergleichen, was in der Optionsspalte steht. Jede Zelle in dieser Spalte hat eine der folgenden Optionen: OptionA, OptionB, OptionC, geordnet nach Wichtigkeit. Der eine von größter Wichtigkeit sollte beibehalten werden und der andere sollte entfernt werden.

Ich versuche auch zu zählen und aufzuzeichnen, wie viele Duplikate aus jeder Gruppe entfernt wurden. Angenommen, es gibt 3 Gruppen: GroupA, GroupB & GroupC, ich möchte ein Array haben und jedes Mal, wenn ein Duplikat entfernt wird, sollte der Code überprüfen, welcher Gruppe er angehört und einen zu diesem Element des Arrays hinzufügen. Wissen Sie, wie ich meinen Code ändern kann, um dies zu erreichen?

Antwort

0

können Sie erklären, und ein Array an der Spitze des Codes initialse (unten sagen Dim I als Long) wie folgt aus:

Dim yourArray(3) As Long 

    yourArray(1) = 0 'GroupA 
    yourArray(2) = 0 'GroupB 
    yourArray(3) = 0 'GroupC 

Dann in Ihrem IF-Anweisung, kurz bevor Sie die Zeile hinzufügen, so etwas löschen :

if(cells(i, 5).value = "GroupA") then yourArray(1) = yourArray(1) + 1 
if(cells(i, 5).value = "GroupB") then yourArray(2) = yourArray(2) + 1 
if(cells(i, 5).value = "GroupC") then yourArray(3) = yourArray(3) + 1 

Es gibt sauberere Wege, dies zu tun, aber dies den Job

getan wird erhalten