Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1468to1472
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

Übertragen Makro dauert sehr lange

Übertragen Makro dauert sehr lange
28.01.2016 22:11:48
Sigi
Hallo,
zur Weiterverarbeitung der Daten aus WksAufZu, werden die einzelnen Positionen
horizontal in Workbooks("F_Daten.xlsm").Worksheets("Auf_Journal") eingelesen.
Die Anz = Variabel
Bei 86 Zeilen dauert das Makro 3:30 Min.
Mache ich hier einen Fehler?
Danke!
Gruß
Sigi
Sub Uebertrag()
Dim Z as Integer, Anz as Integer
Dim bytR as Byte
Set WkbD = Workbooks("F_Daten.xlsm")
Set WksAufJ = wkbd.Worksheets("Auf_Journal")
Set WksAufZu = ThisWorkbook.Worksheets("Auf_Zu")
Anz = 86
bytR = 2
With WksAufJ
For Z = 8 To WksAufZu.Cells(Rows.Count, 1).End(xlUp).Row
If WksAufZu.Cells(Z, 5).Value "" Then
If WksAufZu.Cells(Z, 1).Value "" Then
.Cells(bytR, Anz).NumberFormat = "@"
.Cells(bytR, Anz) = WksAufZu.Cells(Z, 1).Value
Else
.Cells(bytR, Anz) = ""
End If
.Cells(bytR, Anz + 1) = WksAufZu.Cells(Z, 3).Value
.Cells(bytR, Anz + 2) = WksAufZu.Cells(Z, 4).Value
.Cells(bytR, Anz + 3) = WksAufZu.Cells(Z, 5).Value
.Cells(bytR, Anz + 4) = WksAufZu.Cells(Z, 6).Value
.Cells(bytR, Anz + 5) = WksAufZu.Cells(Z, 7).Value
Anz = Anz + 7
End If
Next Z
End With

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übertragen Makro dauert sehr lange
28.01.2016 22:34:07
Daniel
HI
Ein Zugriff auf eine Excelzelle ist ein zeitaufwendiger Vorgang, vorallem wenn in die Zelle ein Wert geschrieben wird.
man sollte daher die Anzahl der Zugriffe auf eine Zelle möglichst reduzieren und versuchen, soviele Zellen wie möglich in einem "Schritt" zu bearbeiten.
das liegt daran, dass Excel bei jedem Scheibvorgang bestimmte Aktionen ausführen muss (z.B. überprüfen, ob andere Zellen von dieser Änderung betroffen und deren Formeln neu berechnet werden müssen)
beschreibt man nun alle Zellen gleichzeitig, so können auch diese Aktionen für alle Zellen gleichzeit ausgeführt werden und müssen nicht für jede Zelle wiederholt werden.
beispiel:
.Cells(bytR, Anz + 1) = WksAufZu.Cells(Z, 3).Value
.Cells(bytR, Anz + 2) = WksAufZu.Cells(Z, 4).Value
.Cells(bytR, Anz + 3) = WksAufZu.Cells(Z, 5).Value
.Cells(bytR, Anz + 4) = WksAufZu.Cells(Z, 6).Value
.Cells(bytR, Anz + 5) = WksAufZu.Cells(Z, 7).Value
geht kürzer und schneller, wenn die Werte als Block übertragen werden:
.Cells(bytR, Anz + 1).Resize(1, 5).Value = WksAufZu.Cells(z, 3).Resize(1, 5).value
nur so am rande: der Zahlentype Byte kann zwar nur Werte von 0 bis 255 aufnehmen, wird aber in VBA wesentlich langsamer verarbeitet, als die Typen Long und Integer.
(das ist zwar hier nicht die Bremse, aber es gibt keinen Grund, für Ganzzahlen einen anderen Typen als LONG zu verwenden)
Gruß Daniel

Anzeige
AW: Übertragen Makro dauert sehr lange
28.01.2016 23:23:06
Sigi
Hallo Daniel,
Danke erstmal für Deine Hilfe!
Muß das noch umsetzen.
Das bytR resultiert aus der Suche heraus.
z.B.
bytR = .Columns(1).Find(what:="AUFMASSKREIS", LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows).Row
bytS = .Rows(1).Find(what:="NKKOMPLETT", LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows).Column
Mir ist bisher nichts anderes zum suchen eingefallen.
Gruß
Sigi

schon richtig, aber...
29.01.2016 00:29:41
Michael
Hi zusammen,
... Excel hat viel mehr als 255 Zeilen und Spalten, also schreibst Du am Anfang statt
Dim Z as Integer, Anz as Integer
Dim bytR as Byte
viel besser:
Dim Z as Long, Anz as Long
Dim bytR as Long, bytS as Long
Sonst mußte ja nix ändern, der Variablen isses egal, ob sie bytR oder lngR oder gaR ganz anders heißt.
Gruß,
Michael

Anzeige
AW: schon richtig, aber...
29.01.2016 05:49:29
Luschi
Hallo Sigi,
das jeder Vba-Schreib- / Kopierbefehl
.Cells(bytR, Anz + 1) = WksAufZu.Cells(Z, 3).Value
wird das Tabellen-Ereignis 'Worksheet_Change' auslöst und solltest Du in diesem Ereignis schon
was programmiert haben, dann wird das jedesmal mitausgeführt.
Such mal unter den Stichwörtern 'Excel Vba GetMoreSpeed', und Du wirst z.B. diesen Ansatz finden:
http://www.office-loesung.de/ftopic523583_0_0_asc.php
Gruß von Luschi
aus klein-Paris

AW: schon richtig, aber...
29.01.2016 08:53:27
Sigi
Hallo Zusammen,
Danke für Eure Hilfe.
Der Tip GetMoreSpeed macht das Makro von 2:23 Min auf 3:35 Sec.
Super!!!
Gruß
Sigi
Anzeige

53 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige