Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1824to1828
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

1,5 Mrd. Vergleiche ?!

1,5 Mrd. Vergleiche ?!
16.04.2021 17:50:17
Marc
Hi,
ich habe zwei Arbeitsblätter - das eine mit ca. 75.000 Einträgen, da andere mit ca. 20.000 Einträgen.
Jetzt muss ich jede Zeile aus Arbeitsblatt 1 mit den Zeilen aus Arbeitsblatt 2 vergleichen. Macht 1,5 Mrd. Vergleiche.
Ich habe schon ein paar Prüfungen / Abbruchskriterien eingefügt, dass nicht alles mit allem verglichen werden muss, aber das Ergebnis scheint nach wie vor die Kapazitäten zu sprengen.
Gibt es außer dem Aufteilen von Arbeitsblatt 1 in n Arbeitsblätter, einer leistungsstärkeren Hardware oder einem effizienter geschriebenem Skript noch andere Möglichkeiten hier zu einem Ergebnis zu kommen?
Bei Ausführung läuft das Skript ca. ne halbe Stunde, dann kommt ne ominöse Fehlermeldung mit der ich erst mal nix anfangen kann. Wenn man die bestätigt bleibt Excel aber weiterhin "ausgegraut", bzw. es kommt keine Rückmeldung vom Programm. Kann natürlich sein, dass das im Hintergrund noch läuft, aber inzwischen haben wir die 60 Minuten Laufzeit hinter uns gelassen und mit der Fehlermeldung da zwischen drin habe ich ehrlich gesagt nicht (mehr) das aller größte Vertrauen, dass hier noch mit einem Ergebnis zu rechnen ist?!
Danke vorab für eure Einschätzung.

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ineffizienter Vergleichs-Code! (owT)
16.04.2021 17:55:15
EtoPHG

AW: Ineffizienter Vergleichs-Code! (owT)
16.04.2021 18:01:05
onur
Poste mal eine Beispielsdatei mit ca je 1000 Daten, das aber genauso aufgebaut ist, wie das Original.
AW: Ineffizienter Vergleichs-Code! (owT)
16.04.2021 18:02:20
onur
Sorry - falscher Zweig.
AW: 1,5 Mrd. Vergleiche ?!
16.04.2021 18:01:46
onur
Poste mal eine Beispielsdatei mit ca je 1000 Daten, das aber genauso aufgebaut ist, wie das Original.
AW: 1,5 Mrd. Vergleiche ?!
17.04.2021 11:04:25
Marc
So sieht der VBA-Code aus:

Sub AbgleichStarten()
Dim LastRowPhin As Long, LastRowFMM As Long, ZeilePhin As Long, ZeileFMM As Long
Dim CounterAbgleichVBA As Long
Dim strComparison As Integer
LastRowPhin = Sheets("phin").Cells(Sheets("phin").Rows.Count, "A").End(xlUp).Row
LastRowFMM = Sheets("FMM").Cells(Sheets("FMM").Rows.Count, "A").End(xlUp).Row
CounterAbgleichVBA = 2
'Schleife über alle Einträge in Tabellenblatt "phin"
For ZeilePhin = 4 To LastRowPhin Step 1
If Sheets("phin").Cells(ZeilePhin, 17).Value = "x" Then
'Schleife über alle Einträge in Tabellenblat "FMM"
For ZeileFMM = 4 To LastRowFMM Step 1
' ---- 1. Prüfung auf Feld A ----
'Da beide Blätter aufsteigend nach Feld A sortiert sind kann Iteration abgebrochen  _
werden,
'sobald Feld A in FMM größer als die von phin ist (weil dann kein Treffer mehr möglich)
If Sheets("FMM").Cells(ZeileFMM, 7).Value > Sheets("phin").Cells(ZeilePhin, 1).Value  _
Then
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 2).Value = Sheets("phin").Cells( _
ZeilePhin, 1).Value
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 3).Value = Sheets("phin").Cells( _
ZeilePhin, 3).Value
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 4).Value = Sheets("phin").Cells( _
ZeilePhin, 7).Value
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 5).Value = Sheets("phin").Cells( _
ZeilePhin, 14).Value
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 6).Value = Sheets("phin").Cells( _
ZeilePhin, 10).Value & "  N/A"
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 7).Value = Sheets("phin").Cells( _
ZeilePhin, 11).Value & "  N/A"
CounterAbgleichVBA = CounterAbgleichVBA + 1
Exit For
ElseIf Sheets("FMM").Cells(ZeileFMM, 7).Value = Sheets("phin").Cells(ZeilePhin, 1). _
Value Then
' ---- 2. Prüfung auf Feld B ----
'Wenn beide Feld B identisch sind erfolgt nächste (3.) Prüfung
If Sheets("phin").Cells(ZeilePhin, 14).Value = Sheets("FMM").Cells(ZeileFMM, 4). _
Value Then
' ---- 3. Prüfung auf Feld C + Feld D ----
'Wenn unterschiedlich dann Ausweis der jeweiligen Werte
If Sheets("phin").Cells(ZeilePhin, 10).Value  Sheets("FMM").Cells(ZeileFMM, 5) _
.Value Or _
Sheets("phin").Cells(ZeilePhin, 11).Value  Sheets("FMM").Cells(ZeileFMM,  _
6).Value Then
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 2).Value = Sheets("phin").Cells(ZeilePhin, 1). _
Value
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 3).Value = Sheets("phin"). _
Cells(ZeilePhin, 3).Value
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 4).Value = Sheets("phin"). _
Cells(ZeilePhin, 7).Value
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 5).Value = Sheets("phin"). _
Cells(ZeilePhin, 14).Value
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 6).Value = Sheets("phin"). _
Cells(ZeilePhin, 10).Value & "  " & Sheets("FMM").Cells(ZeileFMM, 5).Value
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 7).Value = Sheets("phin"). _
Cells(ZeilePhin, 11).Value & "  " & Sheets("FMM").Cells(ZeileFMM, 6).Value
CounterAbgleichVBA = CounterAbgleichVBA + 1
End If
Exit For 'in jedem Fall Abbruch, weil an dieser Stelle Prüfung auf "unterster  _
Ebene". Im Anschluss nächster Eintrag phin.
'Feld B nicht identisch
Else
'(Sortierung - analog Prüfung Feld A)
strComparison = StrComp(Sheets("phin").Cells(ZeilePhin, 14).Value, Sheets("FMM") _
.Cells(ZeileFMM, 4).Value)
If (strComparison  N/A"
Sheets("Abgleich VBA").Cells(CounterAbgleichVBA, 7).Value = Sheets("phin"). _
Cells(ZeilePhin, 11).Value & "  N/A"
CounterAbgleichVBA = CounterAbgleichVBA + 1
Exit For
End If
End If
End If
Next ZeileFMM
End If
Next ZeilePhin
End Sub

Anzeige
AW: 1,5 Mrd. Vergleiche ?!
17.04.2021 13:20:09
onur
DAS ist aber nicht das, worum ich dich gebeten habe, sondern nur ein Teil davon.
Ich brauche die DATEI inkl der Daten - oder erwartest du, dass wir das nachbauen sollen ?
Am Besten mit Ergebnis, damit man sieht, wie es nachher aussehen soll.
Dein Code bringt leider ohne die Datei fast nix, da Keiner weiss, wie die Blätter aussehen und er ja sowieso nicht funktionert
AW: 1,5 Mrd. Vergleiche ?!
18.04.2021 13:12:33
onur
Jetzt musst du nur noch Schritt für Schritt erklären, wo genau der Code wonach suchen und ausgeben soll (z.B.: Wenn auf Blatt XY in Spalte AA das und das UND wenn das und das usw, dann...., sonst ...
Den Code zu analysieren bringt mir nicht viel, da er sowieso nur davon ausgeht, dass die Blätter vorsortiert sind (und ich nicht weiss, inwieweit er überhaupt korrekt läuft).
Anzeige
AW: 1,5 Mrd. Vergleiche ?!
18.04.2021 14:28:00
Marc
Dan versuchen wir es mal:
Für alle Einträge aus Blatt phin mit dem Eintrag "x" in Spalte Q (nur die weichen zu ihrem Vorgänger ab) Vergleich mit "allen" Einträgen aus Blatt FMM.
Wenn Spalte phin/A nicht in Spalte FMM/G gefunden wird dann Ausgabe in Blatt Abgleich VBA.
Wenn Spalte phin A in SPalte FMM/G enthalten dann nächster Vergleich von phin/N mit FMM/D.
Wenn nicht identisch dann Ausgabe in Blatt Abgleich VBA.
Wenn identisch dann nächster Vergleich von phin/J mit FMM/E und phin/K mit FMM/F.
Wenn einer der beiden Werte nicht identisch Ausgabe in Blatt Abgleich VBA.
Wenn identisch dann nächste Zeile aus Blatt phin.
Mehr ist es dann auch nicht...
Im Grunde geht es nur darum jede relevante Zeile in phin (die mit "x") in FMM zu suchen. Wenn ein passender Eintrag gefunden wird (anhand der 3 Kriterien) muss nix gemacht werden, weicht mindestens einer der Kriterien ab wird ein Eintrag geschrieben.
Anzeige
AW: 1,5 Mrd. Vergleiche ?!
19.04.2021 12:51:25
Daniel
Hi
würde ich so machen
1. im Blatt FFM alle drei Vergleichsbegriffe zum einem Text zusammenfassen, am besten mit Trennzeichen, dh in H4:

=E4&"-"&F4&"-"&G4
2. sortiere jetzt das Blatt FFM nach Spalte H aufsteigend.
3. lösche die Zeilen oberhalb von Zeile 3, so dass nur eine Zeile Überschrift steht und ab Zeile 2 die Daten
4. markiere dir jetzt die Zeilen im Blatt phin die nach Ableich VBA müssen, mit folgender Formel in R4:

=Wenn(Q4"x";"";Wenn(SVerweis(J4&"-"&k4&"-"A4;FFM!H:H;1;wahr)=J4&"-"&k4&"-"A4;"";1))
5. dann müssen alle Zeilen, die in Spalte R mit 1 markiert sind, nach Abgleich VBA.
auch hier kannst du nach Spalte R sortieren, so dass die betroffenen Zeilen einen lückenlosen Block, so dass du sie in einem Schritt als ganzes bearbeiten kannst.
und ja, auch mit VBA würde ich genau diese Schritte ausführen.
Gruß Daniel
Anzeige
Sortieren: 32000 Vergleiche in 0,3 Sekunden
16.04.2021 18:06:08
lupo1
http://xxcl.de/0052.htm (dort der Code im unteren Teil)
AW: 1,5 Mrd. Vergleiche ?!
16.04.2021 19:27:06
Daniel
Hi
Was musst du denn ermitteln?
Listen nach dem Vergleichskriterium sortieren und dann SVerweis/Vergleich mit letztem Parameter = 1 verwenden ist bei solchen Datenmengen oft der Schlüssel zum schnellen Erfolg.
Für reine VBA-Programmierung ist oft auch das Dictionary-Objekt hilfreich.
Für eine konkretere Antwort müsstest du genauer beschreiben, was du machen willst.
Gruß Daniel
AW: 1,5 Mrd. Vergleiche ?!
17.04.2021 11:10:30
Marc
Hi,
ich habe den VBA-Code jetzt mal "nur" bei onurs Beitrag gepostet.
Am Ende prüft das Programm 2 Listen miteinander ab. Im Detail wird Feld A aus Liste 1 mit Feld A' aus aus Liste 2 verglichen. Wenn ungleich dann entsprechender Eintrag. Sind die Einträge gleich wird Feld B aus Liste 1 mit Feld B' aus Liste 2 vergleichen. Auch hier gleiches Prozedere: Wenn ungleich entsprechender Eintrag, ansonsten Vergleich Feld C (und Feld D) aus LIste 1 mit Feld C' (und Feld D') aus Liste 2. Wenn ungleich dann entsprechender Eintrag, ansonsten nix.
Mehr ist es dann auch nicht... :(
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige