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

Ausgabe beschleunigen

Ausgabe beschleunigen
06.03.2007 16:08:00
Matthias
Hallo,
bei Stöbern im Forum bin ich über das Problem von Jens (13:48 Uhr) gestolpert und von der Lösung fasziniert. Bevor ich es in meinen Code mit einbaue dachte ich ich probiere es mal aus:
Die ganze Spalte A ist gefüllt mit Werten, Code soll Werte in Array einlesen und dann in Spalte C wieder ausgeben
Dim inhalt(65536) as long
For a = 1 To 65536
inhalt(a) = Cells(a, 1)
Next
Jetzt Ausgabe:
Range(Cells(1, 3), Cells(65536, 3)) = inhalt
statt mit
For b = 1 To 65536
Cells(b, 3) = inhalt(b)
Next
Mit dem range Weg ist er deutlich schneller (Performance ist bei meinem Problem ganz wichtig) nur gibt er bei mir nur Nullen aus.
Was mache ich falsch?
Gruß und Danke Matthias

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dim inhalt(65536) as Variant
06.03.2007 16:15:00
Lars
oT
Nö :-(
06.03.2007 16:18:55
Matthias
Hallo Lars,
mit variant gibt er auf einmal gar nichts mehr aus (Leer) Ich habe das Gefühl, das die Ausgabe auf den Wert inhalt(0) beschränkt ist und der nicht das gesamte Array ausgibt.
Schade aber danke
Gruß
matthias
AW: Ausgabe beschleunigen
06.03.2007 16:31:00
K.Rola
Hallo,
ohne Schleifen:
Sub versiv()
Dim Inhalt As Variant
Inhalt = [a1:a65536]
[c1:c65536] = Inhalt
End Sub

Gruß K.Rola
Leider immer noch nicht
06.03.2007 16:55:34
Matthias
Hallo K.Rola,
das ist es leider immer noch nicht. Am Einlesen kann ich leider nichts ändern, da ich die Daten im Array in meinem richtigen Tool noch zur weiterberechnung benötige.
Es geht einfach nur um die Ausgabe der Daten auf eine möglichst schnelle Art und Weise
Danke trotzdem
Gruß
Matthias B.
Anzeige
Leider doch schon
06.03.2007 17:11:00
EtoPHG
Hallo Matthias,
Du kannst auch in K.Rolas Varinante den Inhalt als Array ansprechen:
Nach dem Kopieren mit
Inhalt = [a1:a65536]
Findest Du die einzelnen Elemente mit Inhalt(1,1), Inhalt(2,1), Inhalt(3,1), Inhalt(...,1),
Gruss Hansueli
AW: Leider immer noch nicht
06.03.2007 17:12:43
IngGi
Hallo Matthias,
wenn das bei dir nicht läuft, dann hast du etwas falsch umgesetzt. Entscheidend ist die Daklaration der Variablen Inhalt. Hinter Inhalt darf kein Klammernpaar stehen und der Variablentyp muss Variant sein, d.h. die Variable wird entweder mit "Dim Inhalt As Variant" oder einfach mit "Dim Inhalt" deklariert. Eine spätere Dimensionierung des Datenfeldes mit ReDim ist möglich aber unnötig.
Gruß Ingolf
Anzeige
AW: Leider immer noch nicht
06.03.2007 17:25:00
IngGi
Hallo Matthias,
ich sehe gerade in meiner Antwort zum Beitrag von Jens, dass das mit Dimensionierung bei der Deklaration doch funktioniert. Dort habe ich die Variable mit
Dim Ausgabe(Variable, Variable)
deklariert. Dabei ist mir dann eingefallen, dass du für diese Einfügemethode immer ein zweidimensionales Datenfeld brauchst. Wenn du dein Datenfeld also dimensionierst, mach es zweidimensional, auch wenn du nur eine Dimension brauchst.
Gruß Ingolf
Gruß Ingolf
AW: Leider immer noch nicht
06.03.2007 17:28:51
IngGi
Hallo Matthias,
ziehe meinen vorigen Beitrag zurück. Es geht doch mit Dimensionierung direkt bei der Deklaration. Allerdings brauchst du für diese Einfügemethode auf jeden Fall ein zweidimensionales Datenfeld. Auch wenn ein eindimensionales Datenfeld für deine Zwecke sonst reichen würde, musst du das Datenfeld zweidimensional anlegen.
Gruß Ingolf
Anzeige
Irgendwie bin ich zu doof
06.03.2007 17:44:00
Matthias
Hallo,
mein Code lautet jetzt mit der zweiten Dimension:
Sub Makro1()
Dim inhalt(0, 65536) As Variant
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Start = Timer
For a = 1 To 65536
inhalt(0, a - 1) = Cells(a, 1)
Next
'Alternative 1 (Dauer knapp 5 sekunden)
'For b = 1 To 65536
'    Cells(b, 3) = inhalt(0,b)
'Next
'Alternative 2 (Dauer knapp 0,5 sekunden)
Range(Cells(1, 3), Cells(65536, 3)) = inhalt
Start = Timer - Start
Start = WorksheetFunction.RoundDown(Start, 2)
MsgBox "Dauer : " & Start & " Sekunden"
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Er gibt mir aber immer nur den Wert den ersten Wert im Array aus.
In meinem richtigen Code bildet sich der Array (eigentlich 12 Dimensionen kann aber zerpflückt werden) erst im Code aus einer Mischung aus einlesen und weiterverarbeiten. 80% meiner Laufzeit verbrate ich damit die Werte wieder in in Excel zu schieben und hatte gehofft es damit zu beschleunigen, aber irgendwie stehe ich auf dem Schlauch
Was mache ich falsch?
Gruß
Matthias B.
Anzeige
AW: Irgendwie bin ich zu doof
06.03.2007 18:11:00
IngGi
Hallo Matthias,
du musst die Dimensionen in inhalt einfach rumdrehen.
Sub Makro1()
Dim inhalt(0, 65536) As Variant
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Start = Timer
For a = 1 To 65536
inhalt(a - 1, 0) = Cells(a, 1)
Next
'Alternative 1 (Dauer knapp 5 sekunden)
'For b = 1 To 65536
'    Cells(b, 3) = inhalt(0, b)
'Next
'Alternative 2 (Dauer knapp 0,5 sekunden)
Range(Cells(1, 3), Cells(65536, 3)) = inhalt
Start = Timer - Start
Start = WorksheetFunction.RoundDown(Start, 2)
MsgBox "Dauer : " & Start & " Sekunden"
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Gruß Ingolf
Anzeige
Ich doof andere nicht - zum Glück
06.03.2007 18:16:00
Matthias
Hi Ingolf,
jetzt klappt es! Wunderbar.
Danke
Gruß
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige