Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1496to1500
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 splitten

Array splitten
07.06.2016 12:53:55
Gaurav
Hallo,
ich habe einen Code geschrieben, indem ein zweidimensionales Array vorkommt, das bis zu 8 Millionen Zeilen (und sieben Spalten) hat. Wenn ich dieses Array in ein Sheet schreiben lasse (B-> Sheets("Table1").Range("A1.G" & [Zeilenmaximum des arr()]) = arr() ) dann werde ich sicher eine Fehlermeldung bekommen, da im Sheet nur etwas mehr als 1 Million Zeilen passen.
Gibt es eine Möglichkeit ohne for-Schleife das Array in beispielsweise acht Teile zu splitten und die Teile auf einmal auszugeben (um die Rechenzeit zu verkürzen)?
Folgendes habe schon implementiert:
Sub blabla()
' Deklarationen der Variablen:
dim arr(1 to 8000000, 1 to 7) as long
dim s, counter as long
s = 1
counter = 0
' Einige bestimmte Zeilen, die arr() auf bestimmte Weise mit Zahlen befüllt
' Jetzt das eigentliche Problem:
for i = 1 to 8000000
counter = counter + 1
Sheets("Table1").Range(counter, s).Value = arr(i, 1)
Sheets("Table1").Range(counter, s+1).Value = arr(i, 2)
Sheets("Table1").Range(counter, s+2).Value = arr(i, 3)
Sheets("Table1").Range(counter, s+3).Value = arr(i, 4)
Sheets("Table1").Range(counter, s+4).Value = arr(i, 5)
Sheets("Table1").Range(counter, s+5).Value = arr(i, 6)
Sheets("Table1").Range(counter, s+6).Value = arr(i, 7)
if counter = 1000000 then
counter = 0
s = s + 10
end if
next i
End Sub
Suche etwas einfacheres, da bei meiner jetzigen Methode bis zu 56 Millionen Zellen nacheinander beschrieben werden, was sicher viel Zeit benötigen wird.
sowas wie:
Sheets("Table1").Range("A1:G1000000").Value = arr(Zeile 1 bis 1000000, spalte 1 bis 7)
Sheets("Table1").Range("I1:O1000000").Value = arr(Zeile 1000001 bis 2000000, spalte 1 bis 7)
usw.
Danke schon Mal im Vorraus.

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array splitten
07.06.2016 13:59:54
Rudi
Hallo,
ohne Schleife kenne ich keine Lösung.
Schreib die Daten erst in ein Array und dann in die Tabelle.
Sub blabla()
' Deklarationen der Variablen:
Dim arr(1 To 8000000, 1 To 7) As Long
Dim s As Integer, m As Integer, counter As Long, i As Long, j As Integer
Dim arrTmp(1 To 1000000, 1 To 7)
t = Timer
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
s = 1
counter = 0
m = 0
' Einige bestimmte Zeilen, die arr() auf bestimmte Weise mit Zahlen befüllt
For i = 1 To 8000000
counter = counter + 1
For j = 1 To 7
arrTmp(counter, j) = arr(i, j)
Next j
If counter = 1000000 Then
Sheets("Table1").Cells(1, s).Resize(1000000, 7) = arrTmp
Erase arrTmp
counter = 0
s = s + 10
End If
Next i
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Gruß
Rudi

Anzeige
AW: Array splitten
07.06.2016 14:57:50
Gaurav
Hallo Rudi,
ja, klar. Betriebsblind wie ich bin, habe ich diese Lösung nicht gesehen. Vielen Dank. Ist somit gelöst. :D
glg
Gaurav

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige