AW: datenty von arrays aendern
09.03.2008 23:45:00
arrays
Hallo Knut,
also mit öffentlichen Variablen spart du aber auch nicht eine Sekunde Rechenzeit. Außerdem ist es Unsinn einen Variant schon als Array zu dimensionieren bzw. umzudimensionieren wenn du ihm einen Zellbereich zuweist. Denn dabei wird die Dimension sowieso an die größe des Ranges angepasst. Versuch es mal:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Public xyz() As Variant
Public Sub test()
Redim xyz(1 To 1000) As Variant
xyz = Range(Cells(1, 1), Cells(10, 1)).Value
End Sub
Dass dein Variant nun Variantwerte enthält ist logisch, denn eine Zelle hat nun mal eine Value-Eigenschaft von Typ Variant. Du kannst ja auch alles mögliche in eine Zelle reinschreiben.
Dass du ein quasizweidimensionales Array bekommst, sollte auch klar sein. Das entsprich ja auch der Zellstruktur. Eine Zelle hat immer eine Zeilenummer und eine Spaltennummer.
Über geschwindigkeit lässt sich streiten mein Rechner benötigt zum umsetzen von einer kompletten Spalte einer Exceltabelle die ich an einen Variant übergebe und dann in ein Double-Array umschaufle gerade mal 0,02 Sekunden. Das umsetzen in ein Variantarray dauert genauso lang.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Public Sub test()
Dim sngTimer As Single
Dim vntVariable As Variant
Dim vntArray() As Variant
Dim dblArray() As Double
Dim lngIndex As Long
vntVariable = Range(Cells(1, 1), Cells(Rows.Count, 1)).Value
sngTimer = Timer
Redim dblArray(LBound(vntVariable) To UBound(vntVariable))
For lngIndex = LBound(vntVariable) To UBound(vntVariable)
dblArray(lngIndex) = vntVariable(lngIndex, 1)
Next
MsgBox Timer - sngTimer
sngTimer = Timer
Redim vntArray(LBound(vntVariable) To UBound(vntVariable))
For lngIndex = LBound(vntVariable) To UBound(vntVariable)
vntArray(lngIndex) = vntVariable(lngIndex, 1)
Next
MsgBox Timer - sngTimer
End Sub
Gruß
Nepumuk