In Excel Datensätze Vergleiche

Hallo alle zusammen.

Ich schreibe momentan ein kleines Programm für Excel 2003. Visual Basic 6.3 . Mein Programm vergleicht zwei Listen die eine ist 30’000 Datensätze lang die andere ist ca. 25’000 Datensätze lang. Ich muss nun alle Datensätze die verschieden sind anzeigen lassen. Da es ziemlich viel Zeit braucht wenn ich zuerst in der Linken Kolone einen Datensatz auswähle dann jeden Datensatz einzeln von der Rechten Kolone auswähle und ihn überprüfe stelle ich meine Frage hier. Ich mache dies momenatn mit Range.Select und frage den Wert mit ActiveCell ab. Findet es ihn geht es zum nächsten Datensatz, wenn nicht schreibt es ihn hin und geht zum nächsten. Insgesammt mache ich so ca. 750’000’000 überprüfungen. Wenn mein Computer nun für 25’000 überprüfungen ca. 10 Sekunden brauch macht dies bei 750’000’000 überprüfungen: 3-4 Tage. Weiss jemand eine schnellere Art ? gibt es in Excel vileicht bereits eine funktion die das macht ? habe ich mich nur verrechnet und innerhalb der nächsten 2 Sekunden wird eine Meldung kommen das er nun diese Datengefunden hat ? Gibt es eine möglichkeit einen Stop Button einzubauen der das Programm anhält so das es später wieder ausführbar ist ?

Gruss Dominik

Hallo Dominik,

ich denke, das geht viel schneller, wenn die Listen erst sortiert werden und dann verglichen. Dürfen Deine Listen sortiert werden? Dann kannst Du die Prüfung auf doppelte Einträge in einem Durchlauf erledigen. Sortieren geht schnell.

Gruß, Rainer

Hallo Dominik,

die meines Wissens schnellste Methode, auf die Daten eines Tabellenblattes zuzugreifen, ist diese:

Sub Tabellenblatt_Einlesen()

Dim varInhalt

With ActiveSheet.UsedRange.SpecialCells(xlLastCell)
varInhalt = Range(Cells(1, 1), Cells(.Row, .Column))
End With

End Sub

Der anschließende Zugriff auf die Variable ist wesentlich schneller als der auf die Zellen einer Tabelle.

Viel Spaß beim Experimentieren!
Martin

Hallo,

ein paar Anhaltspunkte, die die Makro-Laufzeit verkürzen können:

keine Fokusänderungen über Select- oder Activate-Anweisungen,
anstelle dessen Zugriff auf Zellen über Range oder Cells,
Nutzung von Find/FindNext oder Seek (sh. VBA-Hilfe)

Makros kann man i.d.R. mit der „Esc“-Taste abbrechen

hoffe, die Hinweise helfen weiter.
Codebeispiele sind z.Zt. nicht machbar, da Du noch nicht genug Infos zu Deinem Listenaufbau gegeben hast.

Gruß tester!

Hallo Dominik

Hallo Martin

Danke für deinen Tipp brauche nur noch 15 Minuten für die Komplette überprüfung :smile:

Gruss Dominik