Supportnet / Forum / Tabellenkalkulation
Doppelte Zeilen löschen
Frage
Hallo Zusammen,
ich habe ein kleines Makro gebastelt, welches aus einer Liste doppelte Einträge (also die ganze Zeile) löschen soll. Hierbei prüft es den Eintrag in Spalte 3 und danach in Spalte 1 passen die Kriterien, soll die Zeile gelöscht werden.
Es raucht allerdings immer mit Laufzeitfehler 1004 Anwendungs- und Objektfehler (oder so ähnlich) ab.
Kann mir hier jemand Hilfestellung leisten ?
Im Voraus schon Danke
Gruß Ranganga
[code]Sub test()
Dim i As Integer
Dim n As Integer
Dim e As Integer
i = Cells(Rows.Count, 1).End(xlUp).Row
For n = 1 To i
e = n - 1
If Cells(n, 3).Value = Cells(e, 3).Value Then
If Cells(n, 1).Value = Cells(e, 1).Value Then
Rows(n).Select
Selection.Delete Shift:=xlUp
End If
End If
Next
End Sub[/code]
Antwort 1 von yps
hi,
probier mal:
Sub test()
Dim i As Integer
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(i, 3).Value = Cells(i - 1, 3).Value And Cells(i, 1).Value = Cells(i - 1, 1).Value Then
Rows(i).Delete
End If
Next
End Sub
löschen immer von unten
und die Schleife in diesem Fall nur bis Zeile 2 weil es eine Zeile 0 nicht gibt ;-)
select ist ausserdem grässlicher Programmierstil und bis auf wenige Ausnahmen vollkommen überflüssig
cu Micha
probier mal:
Sub test()
Dim i As Integer
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(i, 3).Value = Cells(i - 1, 3).Value And Cells(i, 1).Value = Cells(i - 1, 1).Value Then
Rows(i).Delete
End If
Next
End Sub
löschen immer von unten
und die Schleife in diesem Fall nur bis Zeile 2 weil es eine Zeile 0 nicht gibt ;-)
select ist ausserdem grässlicher Programmierstil und bis auf wenige Ausnahmen vollkommen überflüssig
cu Micha
Antwort 2 von coros
Hallo Ranga,
der Fehler wird in der Zeile
e = n - 1
enstehen. Das Problem dabei ist, dass Du von der Integervariablen "e" den Wert 1 subtrahierst. Die Variable "n" hat beim ersten Schleifendurchlauf den Wert 1 (ergibt sich aus For n = 1 To i). Zieht man davon den Wert 1 ab, erhält man als Ergebnis den Wert 0. Da Du aber die Variable "e" noch weiter verwendest und zwar in der Zeilen
If Cells(n, 3).Value = Cells(e, 3).Value Then
If Cells(n, 1).Value = Cells(e, 1).Value Then
die Variable aber nicht kleiner gleich 0 werden darf, da die erste Zeile die Zeilenzahl 1 hat, wird das mit der subtraktion nichts werden. Die Zeilenzahl darf nie kleiner gleich 0 werden.
MfG,
Oliver
der Fehler wird in der Zeile
e = n - 1
enstehen. Das Problem dabei ist, dass Du von der Integervariablen "e" den Wert 1 subtrahierst. Die Variable "n" hat beim ersten Schleifendurchlauf den Wert 1 (ergibt sich aus For n = 1 To i). Zieht man davon den Wert 1 ab, erhält man als Ergebnis den Wert 0. Da Du aber die Variable "e" noch weiter verwendest und zwar in der Zeilen
If Cells(n, 3).Value = Cells(e, 3).Value Then
If Cells(n, 1).Value = Cells(e, 1).Value Then
die Variable aber nicht kleiner gleich 0 werden darf, da die erste Zeile die Zeilenzahl 1 hat, wird das mit der subtraktion nichts werden. Die Zeilenzahl darf nie kleiner gleich 0 werden.
MfG,
Oliver
Antwort 3 von Saarbauer
Hallo,
dein Problem ist
Sub test()
Dim i As Integer
Dim n As Integer
Dim e As Integer
i = Cells(Rows.Count, 1).End(xlUp).Row
If Cells(n, 1).Value = Cells(e, 1).Value Then
Rows(n).Select
Selection.Delete Shift:=xlUp
End If
End If
Next
End Sub
da der Wert e bei n=1 null wird und Zeile null gibt es nicht
Fang mal mit n=2 an, dann müsste es funktionieren
Gruß
Helmut
dein Problem ist
Sub test()
Dim i As Integer
Dim n As Integer
Dim e As Integer
i = Cells(Rows.Count, 1).End(xlUp).Row
Zitat:
For n = 1 To i
e = n - 1
If Cells(n, 3).Value = Cells(e, 3).Value ThenFor n = 1 To i
e = n - 1
If Cells(n, 1).Value = Cells(e, 1).Value Then
Rows(n).Select
Selection.Delete Shift:=xlUp
End If
End If
Next
End Sub
da der Wert e bei n=1 null wird und Zeile null gibt es nicht
Fang mal mit n=2 an, dann müsste es funktionieren
Gruß
Helmut
Antwort 4 von Ranganga
Hi Leute,
danke, hab ich auch gemerkt, das war der berühmte Griff ins Klo,
allerdings hab ich jetzt noch ne Frage,
ich mochte in der Bereinigten Tabelle, nochmals einen Makro laufen lassen,
welches eine spalte nach gleichen Namen durchsucht, mehrfach einträge (Name und anzahl) in einem neuen sheet ausgibt: Bisher bin ich nur soweit gekommen und steh gerade etwas auf dem schlauch...
danke, hab ich auch gemerkt, das war der berühmte Griff ins Klo,
allerdings hab ich jetzt noch ne Frage,
ich mochte in der Bereinigten Tabelle, nochmals einen Makro laufen lassen,
welches eine spalte nach gleichen Namen durchsucht, mehrfach einträge (Name und anzahl) in einem neuen sheet ausgibt: Bisher bin ich nur soweit gekommen und steh gerade etwas auf dem schlauch...
Sub test2()
Dim i As Integer
Dim n As Integer
Dim e As Integer
Dim name As Characters
Dim count As Integer
i = Cells(Rows.count, 1).End(xlUp).Row
For n = 1 To i
name = Cells(n, 3).Value
count = 0
For e = 1 To i
If name = Cells(e, 3) Then
count = count + 1
End if
Next
Sheets("Tabelle3").Select
Cells(n, 1).Value = name
Cells(n, 1).Value = count
Sheets("Tabelle1").Select
Next
End SubAntwort 5 von Saarbauer
Haloo,
das Problem wird durch den Vorschlag von @yps gelöst.
Da du in deinem Programm die n-te Zeile löschst steht der Zeiger auf der nächsten Zeile (vorher n+1) und anschliessend erhöhst du n und somit wird die eine Zeile (ehemal n+1) nicht mit der Zeile e verglichen. Daher wie @yps vordeschlagen oder n =n-1vor next setzen
Gruß
Helmut
das Problem wird durch den Vorschlag von @yps gelöst.
Da du in deinem Programm die n-te Zeile löschst steht der Zeiger auf der nächsten Zeile (vorher n+1) und anschliessend erhöhst du n und somit wird die eine Zeile (ehemal n+1) nicht mit der Zeile e verglichen. Daher wie @yps vordeschlagen oder n =n-1vor next setzen
Gruß
Helmut
Antwort 6 von Saarbauer
Hallo,
habe deine neue Anfrage in AW 4 falsch interpetiert, meine Antwort geht auf das Problem ein, dass entsteht wenn eine Kombination nicht nur 2 hintereinander steht sonder öfters 3 bis ???
Gruß
Helmut
habe deine neue Anfrage in AW 4 falsch interpetiert, meine Antwort geht auf das Problem ein, dass entsteht wenn eine Kombination nicht nur 2 hintereinander steht sonder öfters 3 bis ???
Gruß
Helmut

