Datenübernahme / -übergabe Blatt <> Datenfeld
09.09.2005 10:59:22
Stefan
Da ich oft größere Datenmengen aus Arbeitsblättern in Arrays oder Collections einlese, benötige ich dafür schnelle Zugriffe.
Bisher habe ich folgende Routine verwendet:
Public
Sub Daten_schreiben_1()
Dim intFeld(1 To 10000, 1 To 100) As Integer
Dim dtmStart As Date
Dim lngZeile As Long
Dim intSpalte As Integer
dtmStart = Now
For lngZeile = 1 To 10000
For intSpalte = 1 To 100
Cells(lngZeile, intSpalte) = intFeld(lngZeile, intSpalte)
Next intSpalte
Next lngZeile
MsgBox "Laufzeit: " & (Now - dtmStart) * 24 * 60 * 60 & " Sekunden."
End Sub
Bei mir dauert das schreiben in ein Blatt damit 683 Sekunden und selbst mit Application.Calculation = xlCalculationManual und Application.ScreenUpdating = False immer noch 113 Sekunden.
Jetzt hat Nepumuk mich auf folgendes geniale Scipt gebracht:
Public
Sub Daten_lesen_2()
Dim intFeld(1 To 10000, 1 To 100) As Integer
Dim dtmStart As Date
dtmStart = Now
intFeld = Range("A1:CV10000")
MsgBox "Laufzeit: " & (Now - dtmStart) * 24 * 60 * 60 & " Sekunden."
End Sub
Nunmehr benötige ich noch 2 Sekunden.
Nun meine Fragen:
1) gibt es einen ähnlich effizieten Befehl für das Schreiben von Daten in Blätter (meine Routine benötigt dazu 42 Sekunden). Eine Umkehr des Befehls in
intFeld=Range("A1:CV10000") führt zu dem Hinweis "Keine Zuweisung an Datenfeld möglich"
2) kann ich einer Datensammlung auf ähnlich effiziente Weise Werte zuweisen oder auslesen ?
Danke für Eure Tipps.
Stefan.