it-swarm.com.de

So entfernen Sie doppelte Zeilen basierend auf einigen Spalten

Ich habe eine Excel-Tabelle, die doppelte Zeilen enthält

Ich möchte eine Zeile entfernen, wenn die Spalten A C D E F identisch sind. (B beim Berechnen von Duplikaten ignorieren, aber beim Entfernen einer Zeile entfernen)

Im Moment ignoriert es B sowohl beim Vergleich als auch beim Löschen.

11
user33949

In Excel 2013

  1. Wählen Sie alle Daten aus
  2. Wählen Sie die Registerkarte Daten -> Duplikate entfernen
  3. Aktivieren Sie "Meine Spalten haben Überschriften", wenn Ihre Daten über Spaltenüberschriften verfügen.
  4. Deaktivieren Sie alle Spalten, die Sie NICHT zum Vergleich verwenden möchten
  5. Drücke OK

Erledigt

18
user33949

Wenn ich Sie in den Zeilen 1 und 2 richtig verstanden habe, möchten Sie eine Zeile 2 genau dann löschen, wenn A1 = A2, C1 = C2, D1 = D2, E1 = E2 und F1 = F2.

Das habe ich mir ausgedacht. Es könnte wahrscheinlich kürzer sein, aber es macht den Trick:

Sub DeleteDuplicate()
Dim current As String
ActiveSheet.Range("A1").Activate
Do While ActiveCell.Value <> ""
    current = ActiveCell.Address
    ActiveCell.Offset(1, 0).Activate
    Do While ActiveCell.Value <> ""
        If ((ActiveSheet.Range(current).Value = ActiveCell.Value) And (ActiveSheet.Range(current).Offset(0, 2).Value = ActiveCell.Offset(0, 2).Value) And (ActiveSheet.Range(current).Offset(0, 3).Value = ActiveCell.Offset(0, 3).Value) And (ActiveSheet.Range(current).Offset(0, 4).Value = ActiveCell.Offset(0, 4).Value) And (ActiveSheet.Range(current).Offset(0, 5).Value = ActiveCell.Offset(0, 5).Value)) Then
            ActiveSheet.Rows(ActiveCell.Row).Delete
        Else
        ActiveCell.Offset(1, 0).Activate
        End If
    Loop
    ActiveSheet.Range(current).Offset(1, 0).Activate
Loop
End Sub

Dies führt eine Schleife durch alle verbleibenden Zeilen aus, wobei die ActiveCell als Zeiger auf die auszuwertende Zeile verwendet wird und die "ursprüngliche" Zeilenzelle in der aktuellen gespeichert wird. Variable. Sobald die Schleife endet, wird die Zelle unter dem Strom aktiviert und die innere Auswerteschleife beginnt erneut.

Wenn ich es irgendwo vermasselt habe, zögere nicht, es mir zu sagen :)

1
kenkh

Fügen Sie diese Formel in jede Zeile ein, z. In Spalte G:

=IF(AND(A2=C2,A2=D2,A2=E2,A2=F2),"DELETE ME","")

Dies ergibt ein Ergebnis wie:

A   B   C   D   D   F   G
-   -   -   -   -   -   -
x   o   x   x   x   x   DELETE ME
x   x   x   x   x   o   
x   x   x   x   x   x   DELETE ME
x   o   o   x   x   x   

Erstellen Sie dann in Spalte G einen Filter für Zeilen mit der Aufschrift 'DELETE ME' und löschen Sie diese.

1
Garrulinae

@ Garrulinae

Ich habe Ihre Idee als Inspiration genommen. Ich hatte viele Zeilen und wollte nur die Zeilen löschen, die doppelte Werte einer Spalte enthielten. Wenn ich Duplikate über dieser Spalte entfernen verwende, werden nur Daten aus dieser Spalte und nicht die gesamte Zeile entfernt. Ich wollte jede 2. und 3. Zeile aus der gesamten Tabelle löschen. Also, was ich getan habe, habe ich eine neue Spalte erstellt und den Wert der ersten Zeile leer gelassen. Lösche mich in der zweiten und dritten Zeile. Und dann habe ich nur die Werte der ersten drei Zeilen dieser bestimmten Spalte (nicht der gesamten Zeile) kopiert und über die gesamte Spalte der Tabelle eingefügt. Jetzt musste ich mich in jeder 2. und 3. Zeile der gesamten Spalte "löschen". Dann muss ich nur noch die Werte dieser Spalte sortieren und alle Zeilen löschen, die delete me enthalten. Sie können dieselbe Lösung verwenden, wenn Sie jeden zweiten, dritten und vierten oder zweiten, dritten, vierten und fünften oder so weiter löschen möchten ...

Hoffe es hilft jemandem ....

0
Sunil