Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Doppelte Zeilen finden bei 2 gleichen löschen

Doppelte Zeilen finden bei 2 gleichen löschen
30.09.2016 17:19:42
chris58
Hallo !
Ich bräuchte Eure Unterstützung. Ich habe eine Liste wo die Spalten: A, B, C und D aufscheinen. Es sollen, wenn die Werte in Zelle A und C ident sind beide Zeilen gelöscht werden. Den u.a. Code habe ich gefunden, jedoch gleicht der nur die Spalte A ab.
Danke im voraus
chris
Sub Gleiche_Loeschen_SpalteA()
Dim i As Long
Dim lngLastR As Long
lngLastR = Cells(Rows.Count, "A").End(xlUp).Row + 1
'Zellinhalte in Spalte A durch "" = Leerzelle ersetzen
Do
i = i + 1
Range(Cells(i + 1, "A"), Cells(lngLastR, "A")).Replace _
what:=Cells(i, "A").Value, replacement:="", lookat:=xlWhole
Loop While WorksheetFunction.CountIf(Range(Cells(i + 1, "A"), Cells(lngLastR, "A")), "") 

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Doppelte Zeilen finden bei 2 gleichen löschen
30.09.2016 21:16:34
Daniel
Hi
Zeilen löschen mit Bedingung macht man ab deiner Excelversion am einfachsten so:
1. am Tabellenende eine Formel hinschreiben, die alle Zeilen die gelöscht werden sollen mit 0 kennzeichnet und alle die stehen bleiben müssen mit der Zeilennummer.
für deinen Fall wäre das die Formel:
=Wenn(ZählenWenns(A:A;A1;C:C;C1)>1;0;Zeile())

die Formel trägt man dann bis zum Tabellenende ein
2. in die Überschriftenzeile der Hilfsspalte schreibt man immer die 0
3. Wende auf die ganze Tabelle die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN an.
Setze die Hilfsspalte als Kriterium ein und wähle die Option "keine Überschrift"
4. Lösche die Hilfsspalte
das geht auch per Code:
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(CountIfs(C1,RC1,C3,RC3)>1,0,Row())"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .column, xlno
.ClearContents
End with
End with
diesen Code kannst du immer verwenden, wenn du die Aufgabe hast, Zeilen mit einer bestimmten Bedinung zu löschen.
Du musst lediglich die Formel entsprechend der Bedingung anpassen, der Rest des Codes ist immer der gleiche. Die Formel kannst du auch ohne VBA-Kenntnisse direkt in der Tabelle erstellen und solange daran rumdoktorn, bis sie das richtige Ergebnis liefert.
Mit dem Recorder kannst du dann das letzte Einfügen aufzeichnen, um so an den passenden Makrocode für die Formel zu erhalten.
Diese Methode ist daher absolut passend für dein VBA-Niveau, löscht die Zeilen aber auch bei größten Datenmengen mit Profigeschwindigkeit.
Gruß Daniel
Anzeige
AW: Doppelte Zeilen finden bei 2 gleichen löschen
30.09.2016 22:59:20
chris58
Hallo Daniel !
Ich habe mir das nun etliche Male durchgelesen. Leider versteh ich das nicht.
Ich habe etliche Codes zusammengefasst.
1. Übertragen Daten aus 2 anderen Mappen
2. diese werden in die neue Mappe in diversen Tabellenblättern aufgelistet
3. Diese Daten werden dann in ein Tabellenblatt dieser Mappe zusammengeführt
4. Löschen der Leeren Zeilen
5. Sortieren dieser Daten nach Spalte A
6. Löschen alle Originalen und Duplikaten Einträge die die Spalten A2:A & C2:C gemeinsam haben...........fehlt noch
7. Formatieren aller Daten der neuen Liste.
Das habe ich bereits. Es fehlt nur mehr der Punkt 6tens. Da bin ich nun bereits seit Stunden im Internet unterwegs um einen Code zu finden, der passen könnte.
Mit deiner Antwort bin ich überfordert. Aber danke für diese
Ich werde weiter versuchen etwas passendes zu finden.
lg chris
Anzeige
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 01:20:16
Daniel
Wenn dich das Einfügen einer Formel und das Ausführen einer Menüfunktion schon über fordert, wird es schwierig
Gruß Daniel
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 03:15:46
Werner
Hallo Chris,
also die Unklarheiten verstehe ich jetzt gerade nicht. Der Code von Daniel ist doch bereits fertig und genau auf deine Bedürfnisse angepasst.
Du brauchst den Code doch nur in deinen bestehenden Code, nachdem dieser deinen Punkt 5 abgearbeitet hat einzufügen. Also Code von Daniel in deinen Code zwischen Punkt 5 und Punkt 7 einfügen.
Das Einzige das du gegebenenfalls noch anpassen musst ist folgendes:
Wenn du das Makro von einem anderen Tabellenblatt aus startest als das, auf dem die ganzen Anpassungen passieren, dann musst du das ActiveSheet rausnehmen und durch Sheets("Dein_Blatt_auf_dem_es_passiert") ersetzen.
Also dann so:
With Sheets("Dein_Blatt_auf_dem_es_passiert").UsedRange
Gruß Werner
Anzeige
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 08:58:43
chris48
Hallo !
Und wenn ich mich nun zum "Depp" mache.........wo trag ich das ein.
chris58
Sub Sortieren()
Columns("A:D").Select
Selection.Sort Key1:=Range("B2"), order1:=xlAscending, header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
End Sub

Sub DoppelteLöschen()
Dim iRow As Long, iRowL As Long
iRowL = Cells(Cells.Rows.Count, 1).End(xlUp).Row
For iRow = iRowL To 1 Step -1
If WorksheetFunction.CountIf(Columns(1), Cells(iRow, 1)) > 1 Then
Rows(iRow).Delete
End If
Next iRow
End Sub

With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(CountIfs(C1,RC1,C3,RC3)>1,0,Row())"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .column, xlno
.ClearContents
End with
End with
Sub Format()
Range("A2:D65000").Select
With Selection.Font
.Name = "Arial"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Range("A1").Select
End Sub

Anzeige
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 12:29:37
Daniel
Hi
Du hast doch deine Makros entsprechend benannt, tausche einfach in dem Macro, das du zu löschen der doppelten verwenden willst, den vorhandenen Code durch meinen aus.
Gruß Daniel
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 13:06:25
chris58
Hallo !
Ja, das habe ich auch vorher so gemacht, doch dann kommt der Laufzeitfehler 438 (Objekt unterstützt diese Eigenschaft oder Methode nicht). Debuggen bei ".EntireRow.RemoveDuplicates .Column, xlNo".
Den bisherigen Code:
Sub DoppelteLöschen()
Dim iRow As Long, iRowL As Long
iRowL = Cells(Cells.Rows.Count, 1).End(xlUp).Row
For iRow = iRowL To 1 Step -1
If WorksheetFunction.CountIf(Columns(1), Cells(iRow, 1)) > 1 Then
Rows(iRow).Delete
End If
Next iRow
End Sub
habe ich auf diesen geändert:
Sub DoppelteLöschen()
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(CountIfs(C1,RC1,C3,RC3)>1,0,Row())"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .Column, xlNo ´hier passiert der Fehler
.ClearContents
End With
End With
End Sub

Anzeige
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 15:34:12
Daniel
Hi
schwer zu sagen.
der Code ist richtig und funktioniert bei mir, wenn dich deinen Code hier rauskopiere und bei mir einfüge.
Die Fehlerursache muss in deiner Datei liegen.
Stimmt die Versionsangabe, die du gemacht hast? Das RemoveDuplicates und ZählenWenns/CountIfs sind neu mit 2007 hinzugekommen. mit älteren Excelversionen läuft dieser Code nicht.
Gruß Daniel
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 15:35:09
chris58
Hallo !
Ja, das habe ich auch vorher so gemacht, doch dann kommt der Laufzeitfehler 438 (Objekt unterstützt diese Eigenschaft oder Methode nicht). Debuggen bei ".EntireRow.RemoveDuplicates .Column, xlNo".
Den bisherigen Code:
Sub DoppelteLöschen()
Dim iRow As Long, iRowL As Long
iRowL = Cells(Cells.Rows.Count, 1).End(xlUp).Row
For iRow = iRowL To 1 Step -1
If WorksheetFunction.CountIf(Columns(1), Cells(iRow, 1)) > 1 Then
Rows(iRow).Delete
End If
Next iRow
End Sub
habe ich auf diesen geändert:
Sub DoppelteLöschen()
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(CountIfs(C1,RC1,C3,RC3)>1,0,Row())"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .Column, xlNo ´hier passiert der Fehler
.ClearContents
End With
End With
End Sub

Anzeige
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 15:39:28
chris58
Hallo !
mein Gott.......2003......da hab ich was verbockt
entschuldigung
chris
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 16:19:21
Daniel
Hi
dann wirds etwas komplizierter.
sortiere die die Liste nach Spalte A und C, so dass gleiche Werte direkt untereinander stehen
verwende folgende Kennzeichnungsformel, die Formel darf aber erst ab Zeile 2 eingefügt werden, da sie sich auf die Zelle obendrüber bezieht:
=Wenn(Oder(Und(A2=A3;C2=C3);Und(A2=A1;C2=C1));1;"")
jetzt kannst du über das InahlteAuswählen - Formeln - Zahlen die markierten Zeilen auswählen und löschen (das hast du in deinem Code ja auch schon mal irgendwo ausgeführt.
damit das auch bei grösseren Datenmengen zuverlässig funktioniert, sollte man vor dem Löschen noch zwei Dinge tun:
- in der Hiflsspalte die Formel durch ihren Wert ersetzen
- die Liste nach der Hilfsspalte sortieren, so dass die zu löschenden Zeilen direkt untereinander stehen:
Sub DoppelteLöschen()
With ActiveSheet.UsedRange
.Sort Key1:=.Cells(1, 1), order1:=xlAscending, _
Key2:=.Cells(1, 3), order2:=xlAscending, Header:=xlYes
With .Columns(.Columns.Count).Offset(1, 1).Resize(.Rows.Count - 1, 1)
.FormulaR1C1 = _
"=IF(OR(AND(RC1=R[1]C1,RC3=R[1]C3),AND(RC1=R[-1]C1,RC3=R[-1]C3)),1,"""")"
.Formula = .Value
If WorksheetFunction.Sum(.Cells) > 0 Then
.EntireRow.Sort Key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
.SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete
End If
.ClearContents
End With
End With
End Sub
Gruß Daniel
Anzeige
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 17:01:28
chris58
Hallo Daniel !
Danke, das geht nun wunderbar. Nochmals entschuldigung, das habe ich nicht gewußt, das 2003 und 2007 so Unterschiede hat. Jetzt geht alles, wie ich es wollte.
Danke nochmals
chris
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 17:05:39
Daniel
von 2003 auf 2007 wurde Excel komplett umstestellt, dieser Versionssprung ist derjenige mit den größten Veränderungen
Gruß Daniel
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 20:43:11
Luschi
Hallo Daniel,
von 2003 auf 2007 wurde Excel komplett umstestellt, dieser Versionssprung ist derjenige mit den größten Veränderungen
sieht zwar für den Otto-Normalverbraucher wie ein Tapetenwechsel aus, aber mit Excel-2010 ff. wurden mehr inhaltliche Fortschritte vollführt als die Schönheitsopperationen zuvor:
- Aggregate-Funktion
- PowerPivot
- PowerQuery (tolle Abfragen aus unterschiedlichsten Quellen- z.B. Facebook)
- PowerMap
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 20:54:02
Daniel
Hi
mein Excel 2010 hat kein PowerQuery, kein PowerMap und kein PowerPivot.
kann sein, dass diese Pogrammteile nachrüstbar sind, aber sie sind nicht im normalen Auslieferumfang enthalten.
PowerQuery ist erst ab 2016 standardmäßig bestandteil von Excel.
Gruß Daniel
AW: Doppelte Zeilen finden bei 2 gleichen löschen
01.10.2016 21:44:04
Luschi
Hallo Daniel,
na-und, dafür gibt es von M$ herausgegebene AddIn's, die in Excel 2007 und darunter nicht funktionieren, aber ab Excel 2010 funktionstüchtig sind. Gerade PowerQuery erspart einem viel Vba-Programmierung, wenn es darum geht, Excel-fremde Dateien vernünftig einzulesen; und PowerPivot löst die 1.048.576 Datensatz-Grenze total auf.
Wer auf sowas verzichtet, abeitet mit einer Technologie von gestern!
Gruß von Luschi
aus klein-Paris
Gerade die Excel-Foren sind voll mit Anfragen mit 'Importieren von CSV-Dateien' mit Anpassungen bezüglich Datum, Zahlenformat usw.
Gerade da hat M$ mächtig draufgesattelt mit PowerQuery/PowerPivot!
Anzeige
ist ja auch egal, jede Version hat neue Features
01.10.2016 22:12:41
Daniel
die dann in der Vorgängerversion nicht funktionieren.
trotzem sollte man darauf achten, was Standardlieferumfang ist und was nachzuinstallierendes Zusatfeature.
gruß Daniel
AW: ist ja auch egal, jede Version hat neue Features
01.10.2016 22:20:29
Luschi
Hallo Daniel,
ich habe bis jetzt noch keinen Anwender gefunden, der mit einem Handy, daß 2007 gekauft wurde, heute noch die Welt einreißen kann - und Rückwärts-Kompatibilität ist doch nur ein Traum, um Kosten zu sparen.
Gruß von Luschi
aus klein-Paris
AW: ist ja auch egal, jede Version hat neue Features
01.10.2016 22:26:44
Daniel
auch 2007 konnte er mit diesem Handy nicht die Welt einreißen und mit einem 2016er Handy kannst du das auch nicht.
Für den Normalanwender, der nicht Datensätze im 6-stelliger Anzahl durchabeiten muss, sondern er vielleich nur eine Nebenkostenabrechnung erstellen will, kam der Haupteil der grundsätzlichen Änderungen mit 2007.
Gruß Daniel

89 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige