Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1208to1212
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

schneller Zugriff auf Arrays

schneller Zugriff auf Arrays
Peter
Hallo,
ich habe ein VBA-Makro im Einsatz, in welchem ich Daten aus mehreren Tabellenblättern verarbeite, die über eindeutige Schlüsselkriterien miteinander verknüpft sind. Für den gezielten Aufruf der mehrstufig verknüpften Daten verwende ich eindeutige Zeilennamen. Dies funktionierte bisher (mit Excel 97 bis Excel 2007) soweit ganz gut und performant, allerdings scheitere ich jetzt an der max. möglichen Anzahl von Namen. Bei der Zuweisung von Zeilennamen erhalte ich nach ca. 65500 vergebenen Namen einen Laufzeitfehler.
Um die Funktionalität weiterhin zu gewährleisten, muss ich vermutlich auf interne Arrays umstellen. Welche Technik empfehlt ihr für Arrays als Ersatz für den Range-Zugriff über Namen, um einen performanten Zugriff über Keywerte sicherzustellen? Das sequentielle Lesen von Arrays mit über 100.000 Einträgen dürfte wohl nicht so performant sein.
Gruß Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: schneller Zugriff auf Arrays
05.04.2011 17:16:38
Christian
Hallo Peter,
das klingt ja so ähnlich wie normalisierte Tabellen bei Datenbanken. Dann könnte man ja auch mit SQL arbeiten.
Zu deiner Frage:
Schlüssel-Werte-Paare kannst du mit 'nem Dictionary erzeugen - auch bekannt als Hash.
siehe Beispiele hier im Archiv oder zB:
http://msdn.microsoft.com/en-us/library/x4k5wbx4%28v=vs.85%29.aspx
Gruß
Christian
Dictionary ist richtig
05.04.2011 20:15:26
Rudi
Hallo,
und die Daten als Array da rein packen. Zugriff hast du dann über den Schlüssel.
Das Dictionary-Objekt ist auch extrem schnell.
als Bsp:
Option Explicit
Dim oDict As Object
Sub oDict_fuellen()
Dim i As Long
Set oDict = CreateObject("scripting.dictionary")
For i = 1 To 100000
oDict(i) = Array(i, i * 3, i ^ 2, "test" & Format(i, "000000"))
Next
End Sub
Sub yyyy()
If oDict Is Nothing Then oDict_fuellen
MsgBox Join(oDict(72123), vbLf)
End Sub
Gruß
Rudi
Anzeige
AW: schneller Zugriff auf Arrays
05.04.2011 21:46:30
Peter
Hallo Christian,
hallo Rudi,
vielen Dank für Eure Tipps, ich werde mir die Dictionary Objects genauer anschauen. Frage: Sind Dictionary Objects auch unter Excel 97 einsetzbar? Wenn ja, gibt es hier was zu berücksichtigen?
Gruß Peter
Dictionary
05.04.2011 21:49:56
Rudi
Hallo,
weiß nicht. Du hast 2007 angegeben.
Musst du testen.
Einfach meinen Code in eine 97-Mappe. Klappt oder klappt nicht.
Gruß
Rudi
AW: Dictionary
05.04.2011 22:15:54
Nepumuk
Hallo,
das Dictionary-Objekt kommt aus der scrrun.dll (Scripting Runtime). Das ist eine Windows-DLL und hat nichts mit Office zu tun. Die DLL ist ab Windows 2000 in der Standardinstallation enthalten.
Hier gibt es eine Übersicht über deren Funktionen: http://www.microsoft.com/germany/technet/datenbank/articles/600360.mspx
Aber Achtung, ich habe schon Firmen erlebt die Scriptblocker einsetzen und der Zugriff auf die DLL hat in deren IT-Abteilung Alarmstufe Rot ausgelöst.
Gruß
Nepumuk
Anzeige
Alarmstufe Rot
05.04.2011 22:58:32
Rudi
Hallo,
endlich mal Action. ;-)
Was du nicht alles auf der Pfanne hast.
Interessanter Artikel, wenn auch weitestgehend bekannt.
Aber auch hier hat MS mal wieder geschlampt.
Siehe ganz unten Script 4.51. Die Ausgabe passt nicht zum Code.
Gruß
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige