Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1788to1792
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

Großes Array in Tabelle schreiben

Großes Array in Tabelle schreiben
03.11.2020 16:42:28
Peter
Hallo zusammen,
der Betreff sagt ja schon vieles :-)
Ich habe ein Array mit den Abmessungen 1040850 * 5
Dieses Array möchte ich in einem Rutsch in eine Tabelle schreiben ... Dort kommen zwar 5 Spalten an ... jedoch nur knapp 60.000 Zeilen
Mein Code sieht wie folgt aus:
'Einlesen der Daten auf einen Rutsch
Open strFile For Input As #hfile
ResultStr = Input(LOF(hfile), #hfile)
Close #hfile
'Daten in Zeilen auftrennen
strImport() = Split(ResultStr, vbCrLf)
'Werte-Array dimensionieren
ReDim varValues(UBound(Split(strImport(lngRows), ";")), UBound(strImport()))
'Einzelne Zeilen in Spalten auftrennen und in Gesamt-Array ablegen
For lngRows = 0 To UBound(strImport())
varDummy = Split(strImport(lngRows), ";")
For intI = 0 To UBound(varDummy)
varValues(intI, lngRows) = varDummy(intI)
Next intI
lngRow = lngRow + 1
Next lngRows
wksT2.Range(wksT2.Cells(1, 1), wksT2.Cells(lngRow, 5)) = Application.Transpose(varValues())
Findet Ihr da einen Fehler und/oder habt einen Tipp für mich?
Vielen Dank und viele Grüße
Peter

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Großes Array in Tabelle schreiben
03.11.2020 17:04:15
Beverly
Hi Peter,
hast du mal mit Ubound geprüft, ob das Array überhaupt so viele Zeilen hat?
Normalerweise würde ich ein Array nach diesem Prinzip ins Tabellenblatt schreiben:
Range("G5").Resize(UBound(arrWerte(), 2) + 1, 5)


AW: Großes Array in Tabelle schreiben
03.11.2020 17:10:21
Peter
Hallo Beverly,
danke für Deine Idee.
In meiner Basisform nutze ich die folgende Zeile:
wksT2.Cells(1, 1).Resize(UBound(varValues(), 2), 5) = WorksheetFunction.Transpose(varValues)
Merkwürdig ist, dass er zwar fünf Spalten mit jeweils einer Million Einträgen schreibt, davon sind jedoch nur knapp 60000 mit Daten gefüllt ... und die kommen alle aus der ersten Spalte meines Arrays.
Alle restlichen Zeilen sind mit #NV belegt ...
Im Lokalfenster kann ich jedoch alle Zahlen sehen ...
Gruß
Peter
Anzeige
AW: Großes Array in Tabelle schreiben
03.11.2020 17:16:14
Beverly
Hi Peter,
hast du mal versucht, anstelle WorksheetFunction.Transpose zu verwenden Application.Transpose?


AW: Großes Array in Tabelle schreiben
03.11.2020 17:06:56
Daniel
Hi
könnte sein, dass das Transpose hier das Limit ist.
früher hatte es diese Beschränkung, allerdings meine ich, dass irgendwann mal verbessert wurde, wobei ich dafür jetzt meine Hand nicht ins Feuer legen würde, und vielleicht ist es ja auch wieder rückgängig gemacht worden.
lass das Transpose mal weg und schreibe die Daten per Schleife in ein neues Array in die neue Ausrichtung um (Schleife über Zeilen und Schleife über Spalten, beim Schreiben Zeilen- und Spaltenindex tauschen)
in den alten Versionen war die Schleife immer schneller als das Transpose und konnte mehr Daten verarbeiten. das Transpose hatte als ursprüngliche Excelfunktion immer das Limit auf der Zeilenanzal der alten Excelblätter (2003 und früher), das wären deine c.a. 60000 Zeilen (65536 um genau zu sein)
Gruß Daniel
Anzeige
AW: Großes Array in Tabelle schreiben
03.11.2020 17:22:15
Peter
Hallo Daniel,
könnte sein, dass Du Recht hast ...
Ich hatte von früher ein Stück Code mit dem Transpose am Schluss.
Habe das jetzt so umgebaut, dass es ohne Transpose geht - und es geht :-)
Danke für die Idee
Herzliche Grüße
Peter
AW: Großes Array in Tabelle schreiben
03.11.2020 18:18:11
Luschi
Hallo Peter,
ich habe Deinen Code mal ausprobiert und da ist doch Einiges nicht ganz koscher:
- Deine Aussage: Ich habe ein Array mit den Abmessungen 1.040.850 * 5
  das sind aber mehrere x-Millionen Zeichen im Array
- diese Vba-Zeile: ResultStr = Input(LOF(hFile), #hFile)
  macht bei mir schlapp, wenn in der Textdatei mehr als 3.500.000 Zeichen enthalten sind
  es kommt Laufzeitfehler '62-Einlesen hinter Dateiende)
- die Variable 'lngRows' ist nirgends im Code definiert/gesetzt
- UBound(strImport()) funktioniert bei mir nicht sondern nur UBound(strImport)
Wenn es jetzt funktionieren sollte, zeicge doch mal Deinen aktuellen vba-ode.
Gruß von Luschi
aus klein-Paris
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige