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

Array wird nicht komplett zurückgegeben

Array wird nicht komplett zurückgegeben
31.01.2023 19:31:45
Hebi
Hallo zusammen,
ich habe folgendes Problem. Ich habe ein Sheet mit ~14.000 Zeilen und 15 Spalten. Ich lasse die Daten zeilenweise in ein Array einlesen und möchte Sie anschließend transponiert zurückgeben. Das funktioniert auch prima und das Array ist mit 188.511 Elementen gefüllt.
Jedoch bekomme ich bei der Ausgabe immer nur 57.439 Zeilen ausgegeben, danach kommen nur noch #NV Werte.
Mein Makro sieht folgendermaßen aus:
Sub ReadDataToArray()
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim dataArray() As Variant
Dim lastRow As Long
Dim i As Long
ThisWorkbook.Sheets("Array").Delete
Set wsSource = ThisWorkbook.Sheets("Step_13")
Set wsTarget = ThisWorkbook.Sheets.Add
wsTarget.Name = "Array"
lastRow = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row
ReDim dataArray(1 To lastRow * 14 - 13)
i = 1
For Row = 2 To lastRow
    For col = 2 To 15
        dataArray(i) = wsSource.Cells(Row, col).Value
        i = i + 1
    Next col
Next Row
wsTarget.Range("A1").Resize(UBound(dataArray), 1).Value = Application.WorksheetFunction.Transpose(dataArray)
End Sub
Wenn ich statt der letzten Zeile folgenden Code verwende funktioniert es, jedoch ist das Makro dann sehr viel langsamer:
For i = 1 To UBound(dataArray, 1)
    wsTarget.Cells(i, 1).Value = dataArray(i)
Next i
Gerne möchte ich verstehen, warum mein ursprünglicher Code nicht korrekt funktioniert. Ich würde mich freuen, wenn jemand helfen kann.

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array wird nicht komplett zurückgegeben
31.01.2023 20:01:56
JoWE
Du benennst Deine Schleifenvariable 'Row'
Ich bin nicht sicher ob 'Row' nicht ein reserviertes
Schlüsselwort in VBA ist.
Evtl. kommt Excel da ins Schleudern.
Gruß
Jochen
AW: Array wird nicht komplett zurückgegeben
31.01.2023 20:15:28
GerdL
Jein, vom Transponieren des eindimensionalen Arrays, denke ich.
Probiers mal so:
Sub ReadDataToArray()
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim dataArray() As Variant
Dim lastRow As Long
Dim i As Long
Dim rw As Long
Dim V As Variant
On Error Resume Next
Set wsTarget = ThisWorkbook.Sheets("Array").Delete
On Error GoTo 0
If Not wsTarget Is Nothing Then wsTarget.Delete
Set wsSource = ThisWorkbook.Sheets("Step_13")
Set wsTarget = ThisWorkbook.Sheets.Add
wsTarget.Name = "Array"
lastRow = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row
V = wsSource.Cells(2, 2).Resize(lastRow - 1, 14).Value
ReDim dataArray(1 To (lastRow - 1) * 14)
i = 1
For rw = 1 To lastRow - 1
    For col = 1 To 14
        dataArray(i) = V(col, rw).Value
        i = i + 1
    Next col
Next Row
wsTarget.Range("A1").Resize(UBound(dataArray), 1) = dataArray
End Sub
Gruß Gerd
Anzeige
AW: Array wird nicht komplett zurückgegeben
31.01.2023 20:24:31
Hebi
Danke für das Feedback. Ich habe den Namen der Variable "Row" durch "iZeile" ersetzt, jedoch funktioniert es weiterhin nicht wie gewünscht.
AW: Array wird nicht komplett zurückgegeben
31.01.2023 20:41:04
Hebi
Danke auch GerdL.
Ich habe den Code umgesetzt, jedoch ist weiterhin das Problem, dass nur 57.439 Zeilen ausgegeben werden und anschließend #NV.
Im Lokalbereich sehe ich, dass das Array korrekt befüllt ist. Daher ist für mich nicht nachvollziehbar, warum die Rückgabe nicht korrekt erfolgt.
AW: Array wird nicht komplett zurückgegeben
31.01.2023 20:51:15
GerdL
Hallo Hebi,
kannst du eine Tabelle u. den eingesetzten Code hochladen?
Gruß Gerd
AW: Array wird nicht komplett zurückgegeben
31.01.2023 20:58:08
Daniel
Hi
Mach das Ausgabe-Array gleich 2-Dimensional und vermeide so das Transponieren:
ReDim dataArray(1 To lastRow * 14 - 13, 1 to 1)
...
dataArray(i, 1) = ...
...
wsTarget.Range("A1").Resize(UBound(dataArray, 1), 1).Value = dataArray
Gruß Daniel
Anzeige
AW: Array wird nicht komplett zurückgegeben
31.01.2023 21:21:38
Hebi
Wow, Danke, Daniel! *o*
Deine Lösung funktioniert einwandfrei. =)
Ich werde mir für die Zukunft merken, wohl besser ohne eindimensionale Arrays und transponieren zu arbeiten.
Vielen lieben Dank auch allen anderen für die schnellen Feedbacks und eure Ideen und Hilfestellungen! Das hat mir wirklich sehr geholfen und ich hab wieder etwas dazu lernen können.
AW: Array wird nicht komplett zurückgegeben
01.02.2023 09:07:14
Daniel
Transponieren hat irgendwo ein Größenlimit bezüglich der Anzahl der Elemente.
Mit kleinen Arrays kann man das machen, bei großen sollte man es vermeiden.
Wenn man unbedingt Transponieren will, kann man es auch selber Programmieren.
Das funktioniert auch mit großen Arrays und ist schneller als die Funktion.
Gruß Daniel
Anzeige
AW: Array wird nicht komplett zurückgegeben
01.02.2023 09:12:01
Der
Hallo,
Nur zur Info über dieses Problem:
Application.Transpose und Worksheetfunction.Transpose sind auf 2^16 (=65536) Elemente limitiert. Es wird nur die Anzahl an Datensätzen verarbeitet, die in dieses Limit passen. Werte, die über dieses Limit hinauslaufen beginnen von vorne zu zählen, so dass lediglich 188511 mod 65536 = 57439 Elemente verarbeitet werden.
Wenn also mit Transpose gearbeitet werden soll, dürfen die Arrays nicht größer als 2^16 sein! Alternativ kann man das Transpose auch per benutzerdefinierter Funktion erledigen.
Grüße
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige