Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
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
2 Arrays miteinander vergleichen
03.12.2020 15:09:42
LukasKu
Hallo!
Ich habe ein Problem, dass ich in einer Mappe 2 Tabellen mit vielen Daten (20k Zeilen, 30 Spalten) immer Werte miteinander vergleichen muss.
Dafür wollte ich Arrays benutzen, aus Performance-Gründen. Habe mal in einer Testversion _
folgendes ausprobiert:

Sub Test1()
Dim ZeilenArr(), ZeilenArr2() As Variant
Set wsALT = Worksheets(2)
Set wsNEU = Worksheets(3)
Set wsSTA = Worksheets("Start")
ZeilenArr = wsNEU.Range("A1:AA1").Value
ZeilenArr2 = wsALT.Range("A1:AA1").Value
wsSTA.Range("A1:AA1") = ZeilenArr
wsSTA.Range("A2:AA2") = ZeilenArr2
'MsgBox WorksheetFunction.Match(ZeilenArr(1), ZeilenArr2, 0)
'MsgBox ZeilenArr(0)
End Sub

Weiß leider nicht, wie ich als Code formatieren kann.
Ich will quasi die ganze jeweilige Zeile in ein Array einlesen und dann die Arrays vergleichen. Dann brauche ich die Unterschiedlichen Werte zwischen den Arrays, die ich dann irgendwo auslesen lassen möchte.
Primär gehts mir also um den Vergleich der Werte in den beiden Arrays, habe es in den MsgBoxen unten mal mit dieser .Match-Funktion probiert.
Bei beiden Msgboxen kommt der Fehler "Index außerhalb des gültigen Bereichs"
Gibt es eine performante Lösung 2 Arrays miteiander zu vergleichen?
Vielen Dank und viele Grüße!
Lukas

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 Arrays miteinander vergleichen
03.12.2020 15:28:08
LukasKu
UPDATE:
Habe den Code angepasst, jetzt funktioniert der Abgleich prinzipiell:
Sub Test1()
Dim ZeilenArr(), ZeilenArr2() As Variant
Set wsALT = Worksheets(2)
Set wsNEU = Worksheets(3)
Set wsSTA = Worksheets("Start")
ZeilenArr = wsNEU.Range("A1:AA1").Value
ZeilenArr2 = wsALT.Range("A1:AA1").Value
wsSTA.Range("A1:AA1") = ZeilenArr
wsSTA.Range("A2:AA2") = ZeilenArr2
MsgBox WorksheetFunction.Match(ZeilenArr(1, 1), ZeilenArr2(1, 1), 0)
For n = 1 To 27
If ZeilenArr(1, n)  ZeilenArr2(1, n) Then MsgBox ZeilenArr(1, n)
Next
End Sub
Ich vermute mal, dass es mit der Match-Eigenschaft schneller wäre, oder? Wenn ich die aktiviere kommt allerdings der Fehler "Die Match-Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden".
Vielleicht weiß da jemand noch weiter?
Ist es performanter die Unterschiede zwischen den zwei Zeilen-Arrays in ein drittes Array zu speichern und dann so auf einmal in die Excel-Tabelle schreiben zu lassen?
Viele Grüße,
Lukas
Anzeige
AW: 2 Arrays miteinander vergleichen
03.12.2020 17:42:01
onur
Bei nur 27 Elementen wäre der Unterschied im Mikrosekundenbereich.
AW: 2 Arrays miteinander vergleichen
03.12.2020 18:24:12
LukasKu
Es geht ja wie im Ursprungspost erwähnt eigtl. um eine Tabelle mit 20k Zeilen und 27 Spalten.
Das ganze muss also im Zweifel 20.000x durchgeführt werden. Aktuell komme ich so noch zu keinem Ergebnis, bzw. er braucht ewig.
Aber trotzdem vielen Dank!
AW: 2 Arrays miteinander vergleichen
03.12.2020 18:27:28
onur
Warum postest du denn dann
1) Keine aussagekräftige (Beispiels-) Datei ?
2) Einen Code für 27 Werte ?
AW: 2 Arrays miteinander vergleichen
03.12.2020 18:36:26
LukasKu
Ich dachte dadurch dass ich geschrieben hatte, dass es sich um eine Test-Version handelt, war es klar, dass ich den Code eben nur für Testzwecke geschrieben habe, weil der eigentliche Sinn der Frage ist ja:
Wie kann ich - prinzipiell - schnell und performant zwei Arrays in meinem Beispiel miteinander vergleichen. Wie eben beispielsweise in meinen Code. Ob das ganze jetzt für 27 Werte bzw. für eine Zeile oder für 20.000 gemacht wird ist ja - prinzipiell - egal.
Da es sich um eine prinzipielle Frage handelt, habe ich auch keine Beispiels-Datei hochgeladen. Tut mir leid, falls ich mich so missverständlich ausgedrückt hatte.
Anzeige
AW: 2 Arrays miteinander vergleichen
03.12.2020 18:44:55
onur
Da du noch nicht mal einen Level angegeben hast, bezweifle ich, dass dir die Antwort alleine weiterhelfen könnte.
"Ob das ganze jetzt für 27 Werte bzw. für eine Zeile oder für 20.000 gemacht wird ist ja - prinzipiell - egal." - ganz im Gegenteil - DAVON hängt es ab, welche Algorithmen man benutzt: für 27 ganz andere als für 20.000.
Wenn du hier schon Hilfe möchtest, solltest du wirklich eine Datei hochladen, denn ich habe wenig Lust auf eine theoretisches Gespräch, wenn ich nicht mal weiss, ob du das auch verstehst und umsetzen kannst, was ich dir vorschlagen würde.
AW: 2 Arrays miteinander vergleichen
03.12.2020 18:49:31
LukasKu
Du hast mich da wohl nicht ganz verstanden, aber ist ja nicht wichtig. Ich bräuchte also eine Lösung für 20.000 Daten bzw. Zeilen.
Ich bin fortgeschritten in VBA, ich denke ich bekomme es dann auch selbst hin, wenn man mir eine Lösung oder zumindest Stichwörter sagt.
Was würdest du mir denn vorschlagen?
Anzeige
AW: 2 Arrays miteinander vergleichen
03.12.2020 18:54:56
onur
Dann eben nicht, dann such mal weiter.
Vor Allem, da der Code, den du gepostet, mir sagt, dass du weit entfernt von "fortgeschritten in VBA" bist.
AW: 2 Arrays miteinander vergleichen
03.12.2020 18:56:18
LukasKu
Okay, wie gesagt es war nur ein kurzer Testcode zum Veranschaulichen der Problematik.
Was würdest du denn an meinem Code verbessern dann?
Trotzdem vielen Dank für deine Rückmeldung!
AW: 2 Arrays miteinander vergleichen
03.12.2020 19:04:09
onur
Nix für Ungut, aber: verbessern?
Nur so eine Beispiels-Frage: Angenommen, der Code würde tatsächlich laufen, hast du dir vorgestellt, dass mit
MsgBox WorksheetFunction.Match(ZeilenArr(1), ZeilenArr2, 0)

alle (bis zu 27 x 20.000 x 2) Unterschiede in einer MessageBox gezeigt werden?
Anzeige
AW: 2 Arrays miteinander vergleichen
03.12.2020 19:06:27
LukasKu
Nein habe ich nicht, wie bereits erwähnt ist der Code nur als Test und zur Veranschaulichung da. Nicht für den realen Einsatzzweck dann. Mir geht es wie gesagt nur um den prinzipiellen Vergleich.
AW: 2 Arrays miteinander vergleichen
03.12.2020 20:06:13
LukasKu
Vielen Dank! Ich glaube, damit kann ich erstmal arbeiten!
AW: 2 Arrays miteinander vergleichen
03.12.2020 20:10:16
onur
Zeile
arr2 = Sheets("Tabelle2").Range("A1:AA20000").Value

kann weg - ist Restmüll.
Anzeige
Gerne !
03.12.2020 20:11:36
onur
AW: 2 Arrays miteinander vergleichen
03.12.2020 19:10:48
peterk
Hallo
Hast Du schon an das Excel AddIn "Inquire" (Arbeitsmappenanalyse) gedacht?
AW: 2 Arrays miteinander vergleichen
03.12.2020 19:12:03
LukasKu
Hallo Peter,
nein tatsächlich noch nicht. Habe auch noch keine Erfahrungen mit AddIns. Weiß auch nicht ob ich hier AddIns installieren darf (Arbeits-Rechner).
Ich werde es mir aber mal angucken. Vielen Dank!
AW: 2 Arrays miteinander vergleichen
03.12.2020 19:24:41
Daniel
Hi
kommt jetzt darauf an, was du unter "Vergleichen" verstehst.
in der Regel ist das die Anwort auf die Frage: ist Wert "A" aus Tabelle1 auch in Tabelle2 vorhanden?
meiner Erfahrung nach ist der performanteste Weg dies zu beantworten, in dem man die Tabelle2 nach der Spalte die den gesuchten Wert enthalten kann aufsteigend sortiert und dann folgendene Formel anwendet:
=Wenn(SVerweis(A1;Tabelle2!A:A;1;wahr)=A1;"vorhanden";"fehlt")
das ist das schnellste, weil auf grund der Sortierung (und das kann Excel auch sehr schnell) die binäre Suche verwendet werden kann, die bei großen Datenmengen um welten schneller ist als die binäre Suche und in VBA und Excel nur über W- und SVERWEIS sowie über die Funktion VERGLEICH verwendet werden kann.
Gruß Daniel
Anzeige
AW: 2 Arrays miteinander vergleichen
03.12.2020 19:29:23
LukasKu
Hallo,
Okay, alles klar. Dann werde ich mich mal damit bisschen reinfuchsen.
Ist die Sortierung notwendig?
Ich habe verschieden Datentypen in den jeweiligen Spalten (Nummern&Text).
Aber vielen, vielen Dank!
VG Lukas
AW: 2 Arrays miteinander vergleichen
03.12.2020 19:34:46
LukasKu
Ah sorry, klar ist die Sortierung notwendig, wegen dieser binären Suche.
Einfach über Range.Sort dann sortieren oder gibt es da auch perfomantere Wege?

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige