Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
296to300
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
296to300
296to300
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellen vergleichen, doppelte Zeilen löschen

Zellen vergleichen, doppelte Zeilen löschen
20.08.2003 15:01:03
sönke
Hallo!
Ich habe folgendes Problem:
In der mir vorliegenden Tabelle gibt es die (für die Lösung wichtigen) Spalten
B, C und D. Ich möchte die Einträge (z.B. F454534-2) von B und D in einer Zeile mit den aller Zeilen vergleichen (2 Kriterien). Stimmen beide gleichzeitig mit einer anderen Zeile überein, soll nachgeschaut werden, welche Zeile in Spalte C die höhere Nummer hat (von Null bis etwa 30). Die Zeile mit der höheren Nummer soll behalten, die mit der niedrigeren gelöscht werden. Ich habe Probleme mit Index, Verweis o.ä., da die "neuen" Werte schon in der Tabelle enthalten sind, und sich der Suchwert somit selber findet. VBA beherrsche ich nicht gut, kann mir aber ein vorhandenes Makro anpassen und bearbeiten. Für Hilfe wäre ich dankbar.
Gruss
Sönke

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen vergleichen, doppelte Zeilen löschen
20.08.2003 15:48:22
WernerB.
Hallo Sönke,
mein Vorschlag:

Sub Soenke()
Dim tx As String
Dim i As Long, j As Long, k As Long, laR As Long
Application.ScreenUpdating = False
laR = Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To laR
If Cells(i, 3).Interior.ColorIndex <> 45 Then
tx = Cells(i, 2).Value & Cells(i, 4).Value
For j = i + 1 To laR + 1
If Cells(j, 2).Value & Cells(j, 4).Value = tx Then
If Cells(i, 3).Value < Cells(j, 3).Value Then
Cells(i, 3).Interior.ColorIndex = 45
Else
Cells(j, 3).Interior.ColorIndex = 45
End If
End If
Next j
End If
Next i
For k = laR To 1 Step -1
If Cells(k, 3).Interior.ColorIndex = 45 Then
Cells(k, 3).EntireRow.Delete
End If
Next k
Application.ScreenUpdating = True
End Sub

Viel Erfolg wünscht
WernerB.

Anzeige
bedingte Formatierung
20.08.2003 16:21:17
Ingo
Hallo Söhnke,
wenn Du nur die entsprechen Zeilen markiert haben möchtest kannst Du auch folgende bedingte Formatierung wählen:
=SUMMENPRODUKT(($B2=$B2:$B$1000)*($D2=$D2:$D$1000))>1 Farbe: Rot
damit werden alle Zeilen, die später gleiche Einträge in spalte B und D (bis zeile 1000)haben
Ich hoffe, das hilft dir etwas weiter
Gruß Ingo

AW: Zellen vergleichen, doppelte Zeilen löschen
20.08.2003 17:20:25
Sönke
Hallo!
Vielen Dank vorab für die Tipps!
Ich bräuchte schon das automatische Löschen, die Tabelle ist sehr lang. Trotzdem danke, Ingo!
Aber mein Problem ist leider auch mit dem Makro (noch) nicht gelöst. Starte ich das Makro, dann stürzt Excel ab. Kann die Ursache sein, dass ich mehrere Zeilen (z.B. 15, stehen untereinander) habe, in der die Spalten B und D übereinstimmen? Es gibt aber immer nur eine Zeile mit dem höchsten Wert in Spalte C (also eindeutig eine "aktuellste" Zeile).
Sieht etwa so aus:
SpalteB SpalteC SpalteD
1223wxq 145 52223
1223wxq 147 52223
1223wxq 117 52223
Hier soll nur die zweite Zeile erhalten bleiben (die 147 ist der höchste Wert).
Das Makro habe ich wohl verstanden. Über das Einfärben findet man später die zu löschenden Zeilen. Auch die Schleifen sind mir klar. Ich finde jedoch leider keinen Fehler bzw. Grund für das Problem.
Hast Du noch eine Idee, Werner?
MFG
Sönke

Anzeige
AW: Zellen vergleichen, doppelte Zeilen löschen
20.08.2003 17:40:55
Sönke
Ich habe jetzt mal einen kleinen Ausschnitt der Tabelle getestet.
Es scheint so, dass Spalte C keine Bedeutung hat, jedenfalls bleibt nur je eine Zeile mit einer "Hauptnummer" aus Spalte B übrig. D.h. alle anderen Zeile mit gleichem Spaltenwert in B, aber anderem in D, werden gelöscht. Das ist doch eigentlich nicht möglich, oder? E-dd46566 hat doch nicht den gleichen Wert wie E-dd22334? Wo liegt da das Problem?

AW: Zellen vergleichen, doppelte Zeilen löschen
21.08.2003 08:24:57
WernerB.
Hallo Sönke,
bezüglich Excel-Absturz nach Makro-Start habe ich "leider" auch keinen Fehler in meinem Code entdeckt. Vielleicht ist bei einer zu großen Datenmenge hier Excel/VBA (extrem viele Schleifendurchläufe) einfach überfordert. Excel ist ja auch ein Tabellenkalkulationsprogramm und keine Datenbank.
Möglicherweise bist Du in diesem Fall bei Access besser aufgehoben.
Den von Dir beschriebenen Fehler ("Es scheint so, dass Spalte C keine Bedeutung hat, jedenfalls bleibt nur je eine Zeile mit einer "Hauptnummer" aus Spalte B übrig. D.h. alle anderen Zeile mit gleichem Spaltenwert in B, aber anderem in D, werden gelöscht.") kann ich so nicht nachvollziehen.
Ich habe diese Ausgangssituation getestet (Spalten B - C - D):
HUGO 24 OTTO
HUGO 30 KARL
HUGO 36 WILLI
HUGO 22 HANS
HUGO 28 PAUL
HUGO 34 SÖNKE
HUGO 40 OTTO
HUGO 21 KARL
HUGO 27 WILLI
HUGO 33 HANS
HUGO 39 PAUL
HUGO 25 WERNER
HUGO 31 OTTO
HUGO 37 KARL
HUGO 26 WILLI
HUGO 32 HANS
HUGO 38 PAUL
HUGO 23 EUGEN
HUGO 29 EUGEN
HUGO 35 KARL
Nach Durchlauf des Makros bleiben die nachstehenden Zeilen übrig.
Was ist daran falsch?
HUGO 36 WILLI
HUGO 34 SÖNKE
HUGO 40 OTTO
HUGO 33 HANS
HUGO 39 PAUL
HUGO 25 WERNER
HUGO 37 KARL
HUGO 29 EUGEN
Gruß WernerB.

Anzeige
AW: Zellen vergleichen, doppelte Zeilen löschen
21.08.2003 09:42:01
sönke
Hallo!
War (zum Glück) nur ein Tippfehler von mir. Das Makro funktioniert schon richtig (Danke!).
Manchmal sieht man halt so einfache Fehler nicht. Aber ein Problem mit der Zeilenanzahl besteht für mich schon. Das Makro braucht zu lange zum Überprüfen. Ich habe eine weitere IF-Anweisung hinzugefügt, es wird jetzt erst mal Spalte B und danach bei Übereinstimmung Spalte D und danach C überprüft. Das geht dann schneller. Aber ich hatte die Idee, wenn die Werte in B geordnet vorliegen (sortieren), dann müsste das Makro doch nur in Spalte B so weit zählen, bis es auf einen neuen Wert trifft, d.h. es würde die Zeilen abschnittsweise durchlaufen (in Deinem Beispiel wäre das nur der Abschnitt "Hugo"). Das müsste die Geschwindigkeit doch erheblich erhöhen, da man nicht alle 7500 Zeilen in der Originaltabelle dürchläuft, sondern nur etwa 50 und dann folgt der nächste Abschnitt.
Dafür wäre doch eine Schleife mit Austrittsbedingung geeignet (wenn neuer Wert in Spalte B, dann...), oder? Doch wie realisiere ich die in VBA? Habe da wohl noch so einige Defizite.
So sieht das Makro bei mir jetzt aus:

Sub Tabelle_überprüfen()
Dim tx As String, tx2 As String
Dim i As Long, j As Long, k As Long, laR As Long
Application.ScreenUpdating = False
laR = Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To laR
If Cells(i, 3).Interior.ColorIndex <> 45 Then
tx = Cells(i, 2).Value
tx2 = Cells(i, 4).Value
For j = i + 1 To laR + 1
If Cells(j, 2).Value = tx Then
If Cells(j, 4).Value = tx2 Then
If Cells(i, 3).Value < Cells(j, 3).Value Then
Cells(i, 3).Interior.ColorIndex = 45
Else
Cells(j, 3).Interior.ColorIndex = 45
End If
End If
End If
Next j
End If
Next i
For k = laR To 1 Step -1
If Cells(k, 3).Interior.ColorIndex = 45 Then
Cells(k, 3).EntireRow.Delete
End If
Next k
Application.ScreenUpdating = True
End Sub

Wenn Du mir da noch helfen könntest, dann wäre das Makro für meine Zwecke perfekt.
MFG
Sönke Engemann

Anzeige
AW: Zellen vergleichen, doppelte Zeilen löschen
21.08.2003 10:12:37
WernerB.
Hallo Sönke,
wenn die Datensätze nach Spalte "B" sortiert sind, dann hierzu mein Vorschlag (in mein unverändertes Makro habe ich nur eine weitere Zeile eingefügt):

Sub Soenke()
Dim tx As String
Dim i As Long, j As Long, k As Long, laR As Long
Application.ScreenUpdating = False
laR = Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To laR
If Cells(i, 3).Interior.ColorIndex <> 45 Then
tx = Cells(i, 2).Value & Cells(i, 4).Value
For j = i + 1 To laR + 1
If Cells(i, 2).Value <> Cells(j, 2).Value Then Exit For
If Cells(j, 2).Value & Cells(j, 4).Value = tx Then
If Cells(i, 3).Value < Cells(j, 3).Value Then
Cells(i, 3).Interior.ColorIndex = 45
Else
Cells(j, 3).Interior.ColorIndex = 45
End If
End If
Next j
End If
Next i
For k = laR To 1 Step -1
If Cells(k, 3).Interior.ColorIndex = 45 Then
Cells(k, 3).EntireRow.Delete
End If
Next k
Application.ScreenUpdating = True
End Sub

Viel Erfolg wünscht
WernerB.

Anzeige
AW: Zellen vergleichen, doppelte Zeilen löschen
21.08.2003 17:37:04
sönke
Hallo!
Habe das Makro nochmals umgebaut, da sich etwas in der Tabelle geändert hat.
Das funktioniert jetzt bestens (und schnell). Spart eine Menge Zeit und Arbeit.
Vielen Dank für die schnelle und sehr gute Hilfe!
MFG
Sönke

285 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige