Microsoft Excel

Herbers Excel/VBA-Archiv

Großes Array in Tabelle schreiben

Betrifft: Großes Array in Tabelle schreiben von: Peter
Geschrieben am: 03.11.2020 16:42:28

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

Betrifft: AW: Großes Array in Tabelle schreiben
von: Beverly
Geschrieben am: 03.11.2020 17:04:15

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)

GrußformelBeverly's Excel - Inn

Betrifft: AW: Großes Array in Tabelle schreiben
von: Peter
Geschrieben am: 03.11.2020 17:10:21

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

Betrifft: AW: Großes Array in Tabelle schreiben
von: Beverly
Geschrieben am: 03.11.2020 17:16:14

Hi Peter,

hast du mal versucht, anstelle WorksheetFunction.Transpose zu verwenden Application.Transpose?


GrußformelBeverly's Excel - Inn

Betrifft: AW: Großes Array in Tabelle schreiben
von: onur
Geschrieben am: 03.11.2020 17:24:00

Guckst du hier:


https://newtonexcelbach.com/2016/01/01/worksheetfunction-transpose-changed-behaviour-in-excel-2013-and-2016/

Betrifft: AW: Großes Array in Tabelle schreiben
von: Daniel
Geschrieben am: 03.11.2020 17:06:56

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

Betrifft: AW: Großes Array in Tabelle schreiben
von: Peter
Geschrieben am: 03.11.2020 17:22:15

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

Betrifft: AW: Großes Array in Tabelle schreiben
von: Luschi
Geschrieben am: 03.11.2020 18:18:11

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

Beiträge aus dem Excel-Forum zum Thema "Großes Array in Tabelle schreiben"