Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
956to960
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
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

datenty von arrays aendern

datenty von arrays aendern
09.03.2008 23:17:00
arrays
Hallo,
ich werde aus der Excel-Hilfe einfach nicht schlau.
ich gehe derzeit so vor bei der Anlage meiner Arrayy ( Werte werden aus Worksheet eingelesen):

' ich definiere alle Variablen als Public um Rechenzeit zu sparen
Public xyz() As Variant
' dann aendere ich die dimensionen
ReDim Preserve  xyz(10)
' dann lese ich werte aus dem worksheet ein
xyz = Range(Cells(1, 1), Cells(10, 1))


nun habe ich extrem langsame arrays die ich nur mit xyz(wert,1) adressieren kann, statt mit xyz(wert)
und der Datentyp ist variant
Da ich sehr aufwendige numerische Berechnungen mache brauche ich eine andere Lösung.
Kann mir jemand helfen? Gibt es eine Lösung ohne Schleifen?
schonmal vielen dank.
Knut

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: datenty von arrays aendern
09.03.2008 23:26:00
arrays
Hallo Knut,
ohne Schleife.
Sub test()
Dim a As Variant

a = Range("A1:A10")

MsgBox a(5, 1)

a = Application.Transpose(a)

MsgBox a(5)

'oder du schreibst gleich

a = Application.Transpose(Range("A1:A10"))


End Sub


Gruß Sepp



Anzeige
AW: datenty von arrays aendern
09.03.2008 23:35:48
arrays
Wow - Vielen Dank, das hilft mir weiter.
JJetzt möcjhte ich aber noch den Datentyp naxch single oder integer aendern.
So gehts schonmal nicht:

Sub test()
Dim a As Integer
a = Application.Transpose(Range("A1:A10"))
' ReDim Preserve a(10) As Integer
End Sub


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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige