Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
264to268
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
264to268
264to268
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Code optimieren - Kategorisieren -

Code optimieren - Kategorisieren -
04.06.2003 14:05:30
Hans-Jörg
Hallo,
Folgender Code soll Eine Tabelle kategorisieren und hat dazu selbst eine Kategorieen-Tabelle.
Kann mann irgend wie die gesamte Spalte bearbeiten z.b. über Array(40000) oder Speicher?
Dieser Code läuft stundenlang bis ca 40000 Zeilen/Zellen bearbeitet sind.

Vielen Dank
Hans-Jörg

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Code optimieren - Kategorisieren -
04.06.2003 16:53:28
Martin Bolleter

Hallo Hans-Jörg

mal so als Idee:
lade deine Tabelle in eine Variant-Variable (gibt ein 2-dim Feld) und mache die ganzen Loops in der Variablen, also im Speicher. Das ist erfahrungsgemäss ca 100x schneller.
Also zB:
angenommen deine Daten stehen in Spalten H bis I, die Kategorie soll in Spalte J. Zuerst das einlesen (geht sehr schnell, auch bei zig-tausend Zeilen):
Dim Feld as Variant
feld = range(cells(1,8),cells(30000,10))

damit hast du alle daten des Bereichs H1 bis J300000 in dieser Variablen, das du mit Feld(x,y) ansprechen kannst. Speichere die gefundenen Kategorien in der 3. Spalte des Feldes, zB
Feld(r,3) = CCode.cells(r,1)
am ende schreibst du das Feld wieder mit einem Befehl in die Tabelle zurück:
range(cells(1,8),cells(30000,10)) = Feld

Wenn du's genauer brauchst, melde dich. Kann aber erst morgen wieder, muss jetzt weg.

Gruss
Martin


Anzeige
Re: Code optimieren - Kategorisieren -
04.06.2003 17:36:58
Nepumuk

Hallo Martin,
das glaube ich nun wirklich nicht, denn ob ich den Speicherbereich eines Arrays oder einer Tabelle anspreche ist vollkommen egal. Außerdem ist die Find-Anweisung auf alle Fälle schneller als 40000 Datensätze so und sooft mit einer Schleife zu durchlaufen. Ich habe das gerade mal getestet. 65536 Datensätze mit einhundert verschiedenen Kategorien. Laufzeit 13 Sekunden. Deine Methode: Laufzeit 2 Minute 20 Sekunden. Da liegt es wohl mehr an einem etwas lahmen Prozessor von Hans_Jörg, als am Programm.

Hallo Hans_Jörg,
du kannst noch ein bisschen was am Programm ändern, damit es schneller läuft. Setze an den Anfang deines Codes folgende Zeile:

Application.ScreenUpdating = False

An das Ende dann:

Application.ScreenUpdating = True

Ergänze die Zeile:

Set zelle = .Find(CCode.Cells(r, 1))

so:

Set zelle = .Find(CCode.Cells(r, 1), LookAt:=xlWhole)

Gruß
Nepumuk

Anzeige
Re: Code optimieren - Kategorisieren -
07.06.2003 18:05:10
Martin Bolleter

Hallo Nepumuk

ich glaube, da liegst du etwas falsch. Ob du einen Zellbereich zB mit Cells(i,1) und i=1 to 50'000 durchsuchst oder eine Array-Variable im Speicher macht einen Riesenunterschied!
Bei meinen Tests sind mit der Speicher_Variante die Kategorien in <=1 Sek zugeordnet, mit Cells() und Find braucht es 57 Sekunden (bei 50'000 Strings in ebensovielen Zeilen).

Ich schick dir mal mein Testfile an deine mail-Adresse.

Gruss
Martin

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige