Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Loop sehr langsam
#1
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
Antworten Top
#2
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
Antworten Top
#3
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)                              
Antworten Top
#4
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)
Antworten Top
#5
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:
  • and.so
Antworten Top
#6
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)                              
Antworten Top
#7
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
Antworten Top
#8
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)
Antworten Top
#9
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
Antworten Top
#10
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.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste