Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1488to1492
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
Inhaltsverzeichnis

Doppelte schnell finden

Doppelte schnell finden
22.04.2016 15:45:15
Willi
Hallo,
obwohl ich auch hier bereits das ein oder andere zu dem Thema gefunden habe, finde ich für mich keine Lösung. Ich möchte das Folgende schneller programmieren, denn bei der Anzahl der Datensätze dauert das EWIG.
Es soll nur in einer Spalte (M) nach den Doppelten gesucht werden.
Dazu könnte ich ja

For iRow = x1 To 1 Step -1
If WorksheetFunction.CountIf(Columns(13), Cells(iRow, 13)) > 1 Then
Rows(iRow).Delete
x = x + 1
End If
Next iRow
verwenden. Leider aber muß ich, wenn denn Doppelte da sind, abfragen, ob in Spalte (L) etwas steht. Für mich ist genau das der Knackpunkt. Ich muß von beiden die Zeilenzahl haben, um dann entscheiden zu können, ob nun die eine oder die andere Doppelte gelöscht werden soll.
Daher habe ich wieder diese Lösung wählen müssen:

Sheets("CSV-Datei").Select
x1 = Sheets("CSV-Datei").UsedRange.SpecialCells(xlCellTypeLastCell).Row
Range("A1").Select
x1 = x1 - 1
y1 = x1
For x = x1 To 2 Step -1
For y = x1 To 2 Step -1
If x  y Then
If wksC.Cells(x, 13) = wksC.Cells(y, 13) Then
z = z + 1
If wksC.Cells(x, 12)  "" Then
wksC.Rows(x).Delete
Else
wksC.Rows(y).Delete
End If
End If
End If
Next y
Next x
Weiß jemand eine Erweiterung der obigen Programmierlösung, (oder etwas anderes Schnelles) so daß ich nicht ständig 45 Minuten warten muß, bis die Spalte nach Doppelten durchsucht ist?
Viele Grüße und vielen Dank im Voraus
Willi

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Doppelte schnell finden
22.04.2016 16:03:19
Daniel
Hi
Da musst FU eigentlich gar nichts Programmieren.
Fürs Entfernen von Doppelten gibt die Funktion Daten - Datentools - Duplikate entfernen
Das lässt bei gleichen Werten die erste Zeile stehen und löscht die folgenden.
Dh über eine entsprechende Vorsortierung kannst du bestimmen, was stehen bleibt und was gelöscht wird.
Das kann man natürlich such in VBA verwenden (.RemoveDuplicates)
Auch wenn du ausprogrammieren willst, solltest du vorsortieren, so dass gleiche Werte direkt untereinander stehen. Dann musst du immer nur benachbarte Zellen vergleichen, um ein Duplikat zu identifizieren und nicht jede Zelle mit allen anderen.
Im Sortieren ist Excel sehr schnell.
Gruß Daniel

Anzeige
AW: Doppelte schnell finden
22.04.2016 16:04:55
Nepumuk
Hallo,
gibt es in Excel 2007 nicht unter dem Register Daten Gruppe Datentools - Duplikate entfernen?
Gruß
Nepumuk

AW: Doppelte schnell finden
22.04.2016 16:31:33
Daniel
Hi
Da musst FU eigentlich gar nichts Programmieren.
Fürs Entfernen von Doppelten gibt die Funktion Daten - Datentools - Duplikate entfernen
Das lässt bei gleichen Werten die erste Zeile stehen und löscht die folgenden.
Dh über eine entsprechende Vorsortierung kannst du bestimmen, was stehen bleibt und was gelöscht wird.
Das kann man natürlich such in VBA verwenden (.RemoveDuplicates)
Auch wenn du ausprogrammieren willst, solltest du vorsortieren, so dass gleiche Werte direkt untereinander stehen. Dann musst du immer nur benachbarte Zellen vergleichen, um ein Duplikat zu identifizieren und nicht jede Zelle mit allen anderen.
Im Sortieren ist Excel sehr schnell.
Gruß Daniel

Anzeige
AW: Doppelte schnell finden
22.04.2016 16:40:36
Willi
Hi Daniel,
vorsortiert ist, das Ganze muß in VBA programmiert sein, da es sich um einen Teil eines Programms handelt.
Aber genau zu dem hier:
Auch wenn du ausprogrammieren willst, solltest du vorsortieren, so dass gleiche Werte direkt untereinander stehen. Dann musst du immer nur benachbarte Zellen vergleichen, um ein Duplikat zu identifizieren und nicht jede Zelle mit allen anderen.
Im Sortieren ist Excel sehr schnell.
fehlt mir das Knowhow. Wie setzte ich das denn um? Denn wenn ich einen Doppelten gefunden habe, ist die zweite Bedingung ja noch nicht erfüllt. Und das Löschen soll dann nicht von Auge/Hand gehen, sondern eben während des Programmablaufes.
Viele Grüße
Willi

Anzeige
wie sortiert?
22.04.2016 21:10:49
Michael
Hi zusammen,
anbei eine Datei mit ein paar wenigen Testdaten zum ...
ersten Herumspielen: Button "Machen" drücken und zusehen.
Für weitere Tests den Button "Testdaten" verwenden.
"Machen" ist mit MsgBoxen, "Machen(t)" macht das Gleiche ohne Ausgaben, aber mit Zeitmessung.
Die Testdaten entsprechen nicht exakt der Vorgabe, aber das sollte so tun.
Die Datei: https://www.herber.de/bbs/user/105158.xlsm
Die erste Sortierung sortiert Spalte L auf- und Spalte M ABsteigend, so kommen zuerst Werte, dann leere Zellen in M - und die fliegen raus.
Schöne Grüße,
Michael

Anzeige
AW: Doppelte schnell finden
23.04.2016 11:06:55
Willi
Hallo,
sortiert habe ich natürlich nach der Spalte M.
Wollte ich nur die Doppelten löschen wäre das, wie gesagt, kein Problem. Da aber zusätzlich eine Abfrage notwendig wird (Spalte L = 12), ist für mich die Frage, wie ich diese Bedingung in der Version:

For iRow = x1 To 1 Step -1
If WorksheetFunction.CountIf(Columns(13), Cells(iRow, 13)) > 1 Then
Rows(iRow).Delete
x = x + 1
End If
Next iRow

unterbringe? Mir fehlt es hier an dem Verständnis, ob ich beide Zeilennummern in dem Moment des Erkennens eines doppelten Eintrages habe, und wenn ja, in welcher Form. iRow, ist klar, aber ich benötige eben zwingend auch die "Vorlage" (den Eintrag, der in iRow nochmals gefunden wird => welche Zeile hat der?)?
Für weitere Infos sage ich schon mal Danke.
Willi

Anzeige
Lösung probiert?
23.04.2016 14:37:35
Michael
Hi Willi,
bitte probiere meine Datei aus; Du kannst ja auch mal ein paar 1000 Zeilen Deiner Original-Daten reinkopieren...
Schöne Grüße,
Micahel

AW: Doppelte schnell finden
22.04.2016 17:43:01
Daniel
Hi
Da musst FU eigentlich gar nichts Programmieren.
Fürs Entfernen von Doppelten gibt die Funktion Daten - Datentools - Duplikate entfernen
Das lässt bei gleichen Werten die erste Zeile stehen und löscht die folgenden.
Dh über eine entsprechende Vorsortierung kannst du bestimmen, was stehen bleibt und was gelöscht wird.
Das kann man natürlich such in VBA verwenden (.RemoveDuplicates)
Auch wenn du ausprogrammieren willst, solltest du vorsortieren, so dass gleiche Werte direkt untereinander stehen. Dann musst du immer nur benachbarte Zellen vergleichen, um ein Duplikat zu identifizieren und nicht jede Zelle mit allen anderen.
Im Sortieren ist Excel sehr schnell.
Gruß Daniel

Anzeige
was soll das? 3x der gleiche Beitrag ! owT
22.04.2016 18:45:48
Matthias

Das liegt an ...
23.04.2016 07:34:40
lupo1
... manchmal nicht sofortiger Aktualisierung des Webs.
Und da wir alle älter werden und uns dessen bewusst sind, kommt man auch leichter auf die Idee, dass der Fehler bei einem selbst liegt: Nicht gesendet! :-)

AW: Doppelte schnell finden
23.04.2016 17:04:56
Willi
Hallo Michael,
Deine Datei habe ich übersehen, sorry!
Im Große und Ganzen ist es das was ich will. Nur Du sortierst nach L und suchst dort nach Doppelten und fragst dann M ab. Ich benötige das genau umgekehrt: also M sortieren und nach Doppelten suchen und dann L zusätzlich abfragen.
Ich habe so den Verdacht, daß das eigentlich recht einfach ist, aber mir fehlt das Knowhow für diese Klammerausdrücke "Resize(zMax, 2) /// ausgabe(1,1)" etc.
Für einen weiteren Tip wäre ich dankbar, so Du keine Lust mehr hast: bis zum kommenden Wochenende schaffe ich es möglicherweise auch selber :(.
Danke schon mal falls Du weitere Infos preisgibst.
Willi

Anzeige
Schnell geändert
23.04.2016 19:44:28
Michael
Hi Willi,
ich habe die Spalten im Makro schnell vertauscht: https://www.herber.de/bbs/user/105177.xlsm
Lange Erklärungen kann ich Dir im Moment nicht bieten, weil ich aus dem Haus muß.
Nur so viel: das Ding arbeitet sehr schnell, weil mit Arrays, das sind im Prinzip rechteckige Kopien des Tabellenblatts, siehe z.B. hier: http://www.online-excel.de/excel/singsel_vba.php?f=152
Und .resize ist eine Änderung der Größe eines Bereichs. Range("A1") ist schlicht die Zelle A1 als Range-Variable. Mit Range("A1").Resize(2,5) erhältst Du dann einen rechteckigen Bereich mit 2 Zeilen und 5 Spalten, also im Prinzip A1:B5.
Letzteres sind Programmier-Basics in VBA, gugel mal, und wenn Du schon dabei bist, dann auch nach .Offset.
Schöne Grüße,
Michael

Anzeige
AW: Doppelte schnell finden
24.04.2016 00:34:07
Daniel
Hi
Da musst FU eigentlich gar nichts Programmieren.
Fürs Entfernen von Doppelten gibt die Funktion Daten - Datentools - Duplikate entfernen
Das lässt bei gleichen Werten die erste Zeile stehen und löscht die folgenden.
Dh über eine entsprechende Vorsortierung kannst du bestimmen, was stehen bleibt und was gelöscht wird.
Das kann man natürlich such in VBA verwenden (.RemoveDuplicates)
Auch wenn du ausprogrammieren willst, solltest du vorsortieren, so dass gleiche Werte direkt untereinander stehen. Dann musst du immer nur benachbarte Zellen vergleichen, um ein Duplikat zu identifizieren und nicht jede Zelle mit allen anderen.
Im Sortieren ist Excel sehr schnell.
Gruß Daniel

Anzeige
Was soll das, jetzt schon 4x! owT
24.04.2016 07:31:05
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige