Registriert seit: 04.09.2016
Version(en): 2010
Hallo zusammen, ich habe ein Makro aufgezeichnet und einen Loop draus gebaut. Der läuft allerdings super langsam - habt ihr vielleicht Tipps, wie man den Code optimieren kann? Code: Sub WKN_Update()
Application.ScreenUpdating = False
Dim i As Integer
Sheets("WKN Data").Select
For i = 1 To 147
Range("B2").Select ActiveCell.FormulaR1C1 = i Range("C3").Select Selection.Copy Cells(i + 4, 10).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("G3").Select Selection.Copy Cells(i + 4, 11).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Next i
Sheets("Overview").Select Range("A1").Select
End Sub
Schonmal vielen Dank im Voraus, freue mich auf eure Antworten! Danke und viele Grüße Andreas
Registriert seit: 12.04.2014
Version(en): Office 365
Hallo ich gehe mal davon aus, dass während der Schleife in den Zellen C3 und G3 Berechnungen stattfinden dann wäre das ein Geschwindigkeitsgewinn Code: Sub WKN_Update() Dim i As Long Dim oldCalc With Application .ScreenUpdating = False oldCalc = .Calculation .Calculation = xlCalculationManual .EnableEvents = False End With With Sheets("WKN Data") For i = 1 To 147 .Range("B2").Value = i .Cells(i + 4, 10).Value = .Range("C3").Value .Cells(i + 4, 11).Value = .Range("G3").Value Next i End With With Application .ScreenUpdating = True .Calculation = oldCalc .EnableEvents = True End With MsgBox "fertsch" End Sub
ansonsten würde das hier schon reichen Code: Sub test() With Sheets("WKN Data") .Range("J5:J151").Value = .Range("C3").Value .Range("K5:K151").Value = .Range("G3").Value End With End Sub
MfG Tom
Registriert seit: 15.04.2014
Version(en): 2007, 2010, 2019
heje excelfreunde, oder dieser vorschlag: Code: Public Sub WKN_Update_02() Dim WSWKN As Worksheet Dim WSOV As Worksheet Dim lngZL01 As Long 'ZeilenZaehler, entspricht "i" Dim lngSP01 As Long 'SpaltenZaehler Dim lngLZ01 As Long 'Letzte Zeile On Error GoTo Fehler With Application .Calculation = xlCalculationAutomatic .ScreenUpdating = False End With Set WSWKN = Application.Worksheets("WKN Data") Set WSOV = Application.Worksheets("Overview") lngSP01 = 10 lngLZ01 = 147 With WSWKN For lngZL01 = 1 To lngLZ01 Step 1 .Cells(2, 2) = lngZL01 .Cells(lngZL01 + 4, lngSP01) = .Cells(3, 3) .Cells(lngZL01 + 4, lngSP01 + 1) = .Cells(3, 7) Next lngZL01 End With With Application .GoTo Reference:=WSWKN.Range("A1"), Scroll:=True .GoTo Reference:=WSOV.Range("A1"), Scroll:=True .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With Set WSWKN = Nothing Set WSOV = Nothing On Error GoTo 0 Exit Sub
Fehler: If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & " " & Err.Description 'Resume Next End Sub
Vielen Dank --Janosch Excel 2019 (64bit) Win 10 Pro (64bit)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, Ich glaube, es sollen die berechneten Ergebnisse bei jedem Schleifendurchgang übernommen werden. Da wäre ein Abschalten der Berechnungsautomatik kontraproduktiv. Man könnte aber schauen, ob es ausreicht, die Formel(n) im VBA umzusetzen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 12.04.2014
Version(en): Office 365
Moinmoin war wohl noch etwas früh heut morgen :D klar sollte die Berechnung da automatisch bleiben aber so sollte es auch schnell genug sein Code: Sub WKN_Update() Dim i As Long With Sheets("WKN Data") For i = 1 To 147 .Range("B2").Value = i .Cells(i + 4, 10).Value = .Range("C3").Value .Cells(i + 4, 11).Value = .Range("G3").Value Next i End With MsgBox "fertsch" End Sub
MfG Tom
Folgende(r) 1 Nutzer sagt Danke an Crazy Tom für diesen Beitrag:1 Nutzer sagt Danke an Crazy Tom für diesen Beitrag 28
• and.so
Registriert seit: 15.04.2014
Version(en): 2007, 2010, 2019
heje excelfreunde,
es wurde nach einer schnellen ausführung gefragt und nicht nach permanenter berechung der arbeitsmappe beim datentransfer. es werden lediglich daten transferiert und ein calculate am am anfang und ende würden ebenfalls eine vollständige berechnung ausführen...
Vielen Dank --Janosch Excel 2019 (64bit) Win 10 Pro (64bit)
Registriert seit: 29.09.2015
Version(en): 2030,5
Langsam ??? Code: Sub M_snb() With Sheets("WKN Data").Range("C3:C150") .Offset(4, 10) = .Value .Offset(4, 14) = .Offset(, 4).Value End With End Sub
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
04.09.2016, 13:38
(Dieser Beitrag wurde zuletzt bearbeitet: 04.09.2016, 13:39 von schauan.)
Hallo Janosch,
wenn Du Deine Ansicht konsequent verfolgst, würde es ggf. reichen, die 147 am Ende der Schleife in B2 einzutragen.
Für die ständigen Einträge in diese Zelle gibt es aus meiner Sicht nur zwei Gründe. Entweder wird nach jedem Eintrag etwas auf Basis dieser Zelle berechnet, oder der TE möchte eine Art Log, um zu sehen, ob der Ablauf irgendwo hängen bleibt.
Um hier die richtige Entscheidung mit 100%iger Sicherheit zu treffen, fehlt eine entsprechende Beschreibung. Ich für meinen Teil tendiere zur Berechnung, da ich im Moment keinen Grund sehe, warum der Code zwischendrin abbrechen sollte.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo, ich bin immer wieder beeindruckt, wie eine Frage und/oder bestehender VBA-Code (fehl)interpretiert werden kann. :17: Toms Vesion in Beitrag #5 sollte passen. Ich hätte ScreenUpdating = False jedoch drin gelassen. Gruß Uwe
Registriert seit: 29.09.2015
Version(en): 2030,5
Ich bin immer wieder beeindrückt wie eine TS/OP meint Fragen stellen zu können ohne komplette Information (d.h. eine Beispieldatei) zu Verfügung zu stellen. Die Helfer sind nur 'guessing'.
Die 'Lösung' in #5 könnte viel effizienter sein in einem Array; aber dazu muss mann die Formel im Arbeitsblatt kennen.
|