# Excel: Range in Array einlesen



## flotschie (18. Dezember 2004)

hi,

also mein Problem ist folgendes: Ich habe in einem Excel Sheet in der Spalte A ungefähr 30.000 Zahlen (also  30.000 rows) stehen. Ich möchte jetzt diese Werte in ein eindimensionales Array einlesen - wie geht das am schnellsten?


----------



## FTUK (20. Dezember 2004)

Indem du ein array[30000] dimensionierst und dan nach und nach alles einliest

```
also 
for i =1 to 30000
    array[i] = range
next
```
 
also was schnelleres faellt mir net ein....
obwohl das auch seine zeit kosten wird denke ich....


----------



## flotschie (20. Dezember 2004)

danke für die Antwort, hab ich schon probiert - das dauert viel zu lange!
bei 30000 werten braucht er ein paar minuten, wenns nach mir ginge sollte er doch nur ein paar sekunden brauchen


----------



## eltro (20. Dezember 2004)

Hi,
kann es sein das du den Range-Wert innerhalb deiner for-next Schleife referenzierst?
Referenzen oder Zeiger auf Werte innerhalb von Schleifen die so oft durchlaufen werden
verursachen extreme Durchlaufzeiten wie du ja festgestellt hast.
Ich würde versuchen die Tabelle in eine Zeichenseperierte Textdatei zu exportieren und
aus der dann die Werte über eine Art "Filewalk" extrahieren.


----------



## flotschie (20. Dezember 2004)

danke für den Vorschlag, das werd ich ausprobieren! Aber ich weiss nicht was ein "Filewalk" ist, könntest du mir das kurz erklären bitte?


----------



## eltro (20. Dezember 2004)

Mit "Filewalk" meine ich das durchlaufen des Inhaltes der Datei von Anfang bis Ende.

Wenn jede deiner Zahlen z.B. an Position 1 einer jeden Zeile beginnt und 5 Zeichen lang wäre könntest du dir diese schnappen und in dein array packen. Wie das mit VB genau machbar ist kann ich dir leider nicht sagen, dafür kenne ich die VB-Funktionen nicht gut genug.


----------



## flotschie (20. Dezember 2004)

aber auch mit einer for-next schleife nehm ich an? Oder meinst du gibts funktionen die das alles auf einmal machen? genausowas bräcuht ich!


----------



## eltro (20. Dezember 2004)

Wie gesagt bin VB-Newbie 

Das benutzen der Schleife ist nicht das Problem, nur die Verwendung von Referenzen innerhalb von Schleifen.

Ich würds wie folgt machen:
-> Datei in String-Variable einlesen 
-> diesen String anhand des Zeilenumbruchs in ein Array aus Strings zerlegen(in php geht das per explode Funktion) 
-> Dieses Stringarray per "for next" abarbeiten und mir dabei meine Zahlen aus jeder Zeile holen.

Da das Array was per "for next" abgearbeitet wird keine referenz sondern eine fest definierte Variable ist, müsste die Schleife wesentlich schneller abgearbeitet werden.


----------



## flotschie (20. Dezember 2004)

Ich verstehe schon....ja so ähnlich werd ichs auch machen, nur verwend ich beim schreiben des files die ReadLine() Methode, die zeilenumbrüche macht...aber das mit den referenzen versteh ich noch nicht ganz..am besten ich erklärs mal mit code:

das file wird so erzeugt (mittels streamwriter (heisst bei mir im code streamy)), wobei hashi ein hashtable ist mit 30000 Schlüssel / Wert-Paaren

For Each item In hashi
      streamy.WriteLine(item.Key & ";" & item.Value)
Next

...dh das txt file sieht dann so aus:

Wert11;Wert12
Wert21;Wert22
Wert31;Wert32

..und so weiter bis Wert300001;Wert300002

auslesen tu ichs jetzt (Nach deinem Tipp  ) so:

Do
            help = streamy.ReadLine()
            If help = Nothing Then Exit Do
            helfer = help.Split(";")
            symb(helfer(1)) = helfer(0)
Loop

...wobei symb ein hashtable ist, help ist ein String, helfer ein StringArray

...d.h. ich gebe nicht das ganze file in ein array sondern arbeite es zeile für zeile ab. Das läuft schon einmal viel schneller als der Excel-Schmarrn  

Wenn ich es so wie du mir vorschlägst machen würde hätte ich ein Problem: ich wüsste nicht wie gross ich den array dimensionieren sollte, in dem dann die Werte kommen sollen. Weil die Anzahl der Werte bei mir im Programm zwar immer so etwa 30000 sind, aber eben nie genau 30.000. Aber egal du hast mir schon sehr weitergeholfen!


----------

