PDA

Vollständige Version anzeigen : Falls Einträge gleich -> löschen


windig
08.07.2015, 13:25
Hallo Leute!
Ich möchte gerne alle Zeilen einer Tabelle löschen, die in fünf ausgewählten Spalte alle die selben Einträge haben. Also z.B. überall denselben Zahlenwert.
Bsp.
A B C
1 1 1
1 1 2
-> 1. Zeile löschen, 2. Zeile NICHT löschen.

Code:

Sub Filtern()
Dim Lastrow As Long
Dim Lrow As Long

With ActiveSheet
'letzte Zeile bestimmen
Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
'Von unten nach oben durchsuchen
For Lrow = Lastrow To 1 Step -1
If .Cells(Lrow, "A").Value = .Cells(Lrow, "B").Value = .Cells(Lrow, "C").Value = .Cells(Lrow, "D").Value = .Cells(Lrow, "E").Value Then .Rows(Lrow).Delete
Next Lrow
End With
End Sub


Habt ihr eine Idee, wo mein Fehler ist? Wahrscheinlich in der If-Anweisung.

chris-kaiser
08.07.2015, 13:38
Hi,

Sub dupli_weg()
ActiveSheet.Range("$A$1:$E$" & Rows.Count).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5), Header:=xlNo 'xlYes
End Sub

windig
08.07.2015, 14:23
Funktioniert bei mir noch nicht.
Entweder passiert nichts (Testtabelle) oder es wird Fehler 400 angezeigt ("richtige" Tabelle).

chris-kaiser
08.07.2015, 14:50
Hi,

hier mal eine Demo

windig
08.07.2015, 14:51
Hi,
ich schaue spätestens Freitag wieder hier rein! Kann morgen leider nicht auf das Internet zugreifen und muss jetzt los :(

windig
10.07.2015, 10:13
Hi!
Also ich weiß jetzt, wieso das bei mir oben nicht geklappt hat. Und zwar löscht dein Code doppelte Zeilen (also Zeile 3 und 6 haben z.B. den gleichen Inhalt -> löschen).

Bei mir geht es aber darum, eine Zeile zu löschen, wenn in fünf ausgewählten Spalten der selbe Wert vorliegt. Weiß du, was ich meine?

Beispiel:
A B C
1 1 1
1 1 2
-> 1. Zeile löschen, 2. Zeile NICHT löschen.

RPP63neu
10.07.2015, 10:35
Hallo!
- 1. Zeile Überschrift
- ab Zeile 2 Hilfsspalte
- Formel in F2: =ZÄHLENWENN(A2:E2;A2)
- Formel nach unten ziehen
- Spalte F nach 5 filtern
- sichtbare Zeilen ab Zeile 2 löschen

Lässt sich natürlich auch als Makro durchführen.

Gruß Ralf

chris-kaiser
10.07.2015, 10:49
Hi,

wenn in fünf ausgewählten Spalten

öhmm, du meinst wohl mit Spalten -> Zeilen?
dann kannst du es so machen wie von Ralf vorgeschlagen.

RPP63neu
10.07.2015, 10:55
Wie versprochen als Makro:
Sub WegDamit()
Application.ScreenUpdating = False
With Tabelle3 'CodeName anpassen!
.Range("F2:F" & .Cells(.Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = _
"=COUNTIF(RC[-5]:RC[-1],RC[-5])"
.UsedRange.AutoFilter 6, 5
Intersect(.Rows("2:" & .Rows.Count), .UsedRange.SpecialCells(xlCellTypeVisible)).EntireRow.Delete
.UsedRange.AutoFilter
.Columns(6).Delete
End With
End Sub
Dauert bei 1000 Zeilen 0,1 Sekunden und dürfte der rückwärts laufenden Schleife um den Faktor 100 (mindestens) überlegen sein.

Gruß Ralf

windig
10.07.2015, 12:41
Vielen Dank, Leute!