2012-04-11 13 views
2

Ich habe mir mehrere andere Stapelüberlauffragen angeschaut, aber ich habe die Antwort nicht gefunden, nach der ich suche.Gesamte doppelte Zeilen markieren (nicht einzelne Werte)

Ich habe eine Excel-Tabelle mit 25.000 Zeilen in folgendem Format:

userid | taskid | taskcode 
1  |  3 |  K 
1  |  4 |  O 
1  |  4 |  L 
1  |  5 |  O 
2  |  3 |  O 

Was will ich alle Zeilen tun zu identifizieren, die ich würde erwarten, dass die zweite dupliziert werden userid und taskid, in dem obigen Beispiel unter Berücksichtigung und dritte Zeilen, die hervorgehoben werden sollen.

Ich bin mir nicht sicher, wie machbar es ist, würde ich idealerweise die doppelte Zeile mit dem taskcodeO eher als L identifizieren möchten.

Mein Endziel ist es, alle doppelten userid/tastid-Zeilen mit dem Taskcode O zu entfernen, unabhängig davon, wie es erreicht wird (Hervorhebung, Sortierung nach Highlights oder Verwendung von vba).

Antwort

2

Ok, löste es nach Herumalbern - ich werde diese Antwort hier für zukünftige Referenz lassen, es sei denn, es gibt einen effizienteren Weg identifiziert.

Schritt 1

Erstellen einer kombinierten Zelle mit beiden userid und taskid Werte =A2&B2 in Spalte D.

Schritt 2

Verwenden der Zustands Duplikate für die Hervorhebung der Formatierung gebaut werden.

Schritt 3

benutzerdefinierte Sortierung unter Verwendung des markierte Duplikat roten Zellen an der Spitze markiert, dann die taskcode in dem kundenspezifischen Auftrag Sortierung selektiert (O, K, L)

Schritt 4

Markieren Sie einfach alle Zeilen (die jetzt in Blöcken sind), die Sie löschen möchten.

+1

+1 Ich hätte den verketteten Ansatz auch verwendet, schön und einfach –

0

Wenn Sie versuchen möchten, mit VBA.

Sub duplicates_separation() 



     Dim duplicate(), i As Long 
     Dim delrange As Range, cell As Long 
     Dim delrange2 As Range 
     Dim shtIn As Worksheet 
     Dim numofrows1 


      Set shtIn = ThisWorkbook.Sheets("sheet1") 

     x = 2 
     y = 1 

     Set delrange = shtIn.Range("c1:b30000") 'set your range here 
     Set delrange2 = shtIn.Range("b1:f30000") 
     ReDim duplicate(0) 
    'search duplicates in 2nd column 
     For cell = 1 To delrange.Cells.Count 
      If Application.CountIf(delrange, delrange(cell)) > 1 Then 
       ReDim Preserve duplicate(i) 
       duplicate(i) = delrange(cell).Address 
       i = i + 1 
      End If 
     Next 
    'search duplicates in 3rd column 
     For cell = 1 To delrange2.Cells.Count 
      If Application.CountIf(delrange2, delrange2(cell)) > 1 Then 
       ReDim Preserve duplicate(i) 
       duplicate(i) = delrange2(cell).Address 
       i = i + 1 
      End If 
     Next 


      'print duplicates 

     For i = UBound(duplicate) To LBound(duplicate) Step -1 
     shtIn.Range(duplicate(i)).EntireRow.Value.delete 
     x = x + 1 
    Next i 


    End Sub 
+0

Der obige Code hat nicht für mich funktioniert. Es friert eine Minute lang ein und gibt schließlich das "Object Required" -Box-Feld ohne Hervorhebung von Duplikaten. – NT01