Supportnet Computer
Planet of Tech

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

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

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
Zitat:
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

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...

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 Sub


Antwort 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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: