Office: Makro Laufzeit verkürzen

Helfe beim Thema Makro Laufzeit verkürzen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich hätte eine allgemeine Frage... Ich Habe ein makro, welches einwandfrei läuft, aber sehr lange braucht bis es vollständig... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von remix92, 13. September 2017.

  1. Makro Laufzeit verkürzen


    Hallo zusammen,

    ich hätte eine allgemeine Frage...

    Ich Habe ein makro, welches einwandfrei läuft, aber sehr lange braucht bis es vollständig ausgeführt wird...

    Beispielsweise braucht es für 23 Tabellenblätter ca. 15-20 min...
    Der code würde folgendermaßen Lauten:

    PHP:
             Option Explicit
    Sub Test_letzte
    ()
    Application.ScreenUpdating False
    Dim letzteSpalte    
    As Long
    Dim n               
    As Long
    Dim i               
    As Long
    Dim Anzahl_A      
    As Long
    Dim Anzahl_F      
    As Long
    Dim Anzahl_L     
    As Long
    Dim WS              
    As Worksheet


    For Each WS In Worksheets


    If WS.Name <> "Dummy" Then
    If WS.Name <> "Ergebnis" Then
    If WS.Name <> "A_Fehler" Then
    If WS.Name <> "F_Fehler" Then

    Worksheets
    (WS.Name).Select


    Anzahl_A 
    Worksheets("Dummy").Range("D3")
    Anzahl_F Worksheets("Dummy").Range("d4")
    Anzahl_L Worksheets("Dummy").Range("d5"' Aufruf mit Startzeile


    i = 2
    For n = 1 To Anzahl_F

    Call ttt(i, Anzahl_L + 2)

    i = 2 + 11 * n
    Next n

    End If
    End If
    End If
    End If

    Next WS

    End Sub
    Sub ttt(Startzeile As Long, letzteSpalte As Long)
    Application.ScreenUpdating = False
    Dim Summe_p         As Range
    Dim STD_s           As Range
    Dim STD_t           As Range
    Dim x_range         As Range
    Dim y_Range         As Range
    Dim WS              As Worksheet


    Dim Anzahl_A        As Long
    Dim Anzahl_F        As Long
    Dim Anzahl_L       As Long

    Dim a               As Long
    Dim n               As Long
    Dim letzteSpalte_p  As Long


    Zeilenindizes
    Dim s               
    As Long
    Dim t               
    As Long
    Dim x               
    As Long
    Dim y               
    As Long
    Dim p               
    As Long
    Dim sum_p           
    As Long
    Dim std_x           
    As Long
    Dim std_y           
    As Long
    Dim produkt_stdx_stdy 
    As Long
    Dim Lots            
    As Long
    Dim Kor_k           
    As Long

    Anzahl_A 
    Worksheets("Dummy").Range("D3")  '=23
    Anzahl_F = Worksheets("Dummy").Range("d4")  '
    =34
    Anzahl_L 
    Worksheets("Dummy").Range("d5")  '=20

    For Each WS In Worksheets


    If WS.Name <> "Dummy" Then
    If WS.Name <> "Ergebnis" Then
    If WS.Name <> "A_Fehler" Then
    If WS.Name <> "F_Fehler" Then

    Worksheets(WS.Name).Select
    Zeilenindizes aus Startzeile berechnen
    Startzeile
    Startzeile 1
    Startzeile 2
    Startzeile 3
    Startzeile 4
    Startzeile 1
    sum_p 
    Startzeile 5
    std_x 
    Startzeile 6
    std_y 
    Startzeile 7
    produkt_stdx_stdy 
    Startzeile 8
    Lots 
    Startzeile 9
    Kor_k 
    Startzeile 10

    Set x_range 
    Worksheets(WS.Name).Range(Cells(s3), Cells(sAnzahl_L 2))
    Set y_Range Worksheets(WS.Name).Range(Cells(t3), Cells(tAnzahl_L 2))

    3
    For 1 To Anzahl_L



    Cells
    (1Anzahl_L 3) = "Mittelwert"
    Cells(sAnzahl_L 3) = Application.WorksheetFunction.Average(x_range)   ' Mittelwert A
    Cells(t, Anzahl_L + 3) = Application.WorksheetFunction.Average(y_Range)   ' 
    Mittelwert F




    Cells
    (x2) = "A - Mittelwert"
    Cells(xa) = Cells(sa).Value Cells(sAnzahl_L 3).Value ' x - MW
    Cells(y, 2) = "F - Mittelwert"
    Cells(y, a) = Cells(t, a).Value - Cells(t, Anzahl_L + 3).Value ' 
    yMW

    Cells
    (p2) = "(A - Mittelwert) * (F - Mittelwert)"
    Cells(pa) = Cells(xa).Value Cells(ya).Value ' Produkt   (x - MW) *  (y- MW)
    a = 3 + n
    Next n
    Set Summe_p = Worksheets(WS.Name).Range(Cells(p, 3), Cells(p, Anzahl_L + 2))

    Cells(sum_p, 2) = "Summe von Produkten"
    Cells(sum_p, 3) = Application.WorksheetFunction.Sum(Summe_p)  ' 
    Summe von Produkten

    Set STD_s 
    Worksheets(WS.Name).Range(Cells(s3), Cells(sAnzahl_L 2))
    Set STD_t Worksheets(WS.Name).Range(Cells(t3), Cells(tAnzahl_L 2))

    Cells(std_x2) = "Standardabweichung von A"
    Cells(std_x3) = Application.WorksheetFunction.StDev(STD_s)  ' STD x

    Cells(std_y, 2) = "Standardabweichung von F"
    Cells(std_y, 3) = Application.WorksheetFunction.StDev(STD_t) ' 
    Std y

    Cells
    (produkt_stdx_stdy2) = "(STD A) * (STD F)"
    Cells(produkt_stdx_stdy3) = Cells(std_x3).Value Cells(std_y3).Value  ' Produkt von STD x und STD y

    Cells(Lots, 2) = "Anzahl_L"
    Cells(Lots, 3) = Anzahl_L

    Cells(Kor_k, 2) = "Korrelationskoeffizient"
    Cells(Kor_k, 3) = 1 / (Anzahl_L - 1) * Cells(sum_p, 3).Value / Cells(produkt_stdx_stdy, 3).Value ' 
    Korrelationskoeffizient

    End 
    If
    End If
    End If
    End If

    Next WS


    End Sub
    :)
     
  2. Arbeite grundsätzlich mit Variant-Arrays:

    a = [A1:Z99999] 'Bereich in Array, inklusive Leerzellen für die Ergebnisse
    a(i, j) = ... 'irgendwelche Zuweisungen
    [A1:Z99999] = a 'zurück ins Arbeitsblatt
     
  3. Hallo,

    eine ernsthafte Beschleunigung (40x-100x) erreicht man, wenn man Bereiche auf einmal in ein Array kopiert "Ar=range("A1:F500") und alle Berechnung im Array durchführt. Viele, aber nicht alle, Arbeitsblattfunktionen klappen auch in Arrays.

    Deinen code durchzugehen und umschreiben, ist mir zu mühsam.

    mfg
     
  4. Makro Laufzeit verkürzen

    Vielen Dank *Smilie

    Ich werde mal schauen ob ich es schaffe *Smilie

    da ich noch keine Erfahrungen mit Arrays habe, werde ich mich da mal einlesen und schauen ich es hinbekomme *biggrin.gif*
     
  5. Hallo remix92,

    wenn Du diese Ereignisprozedur
    Private Sub Worksheet_Change(ByVal Target As Range)
    in Deinen Worksheets definiert hast, dann mußt Du mit Code:
    arbeiten, damit die Spaßbremsen von Excel vorrübergehend gelöst werden. Dies beschleunigt das Makro auch ohne Arrays schon ungemein. Trotzdem ist der Hinweis auf die Arrays sehr sinnvoll, nur bedeutet das auch sehr viel Aufmerksamkeit vom Programmierer, da sich bei jeder Strukturänderung der Tabelle Anpassungen am Array erfolgen müssen.
    Schau auch mal nach: Excel Vba GetMoreSpeed
    Da sind die 4 oberen Einstellungen in einer Prozedur hinterlegt.

    Gruß von Luschi
    aus klein-Paris
     
  6. Vielen Dank für eure Antworten *Smilie

    Also hab veruscht Arrays zu "erstellen" leider ohne Erfolg..

    Könnt ihr vllt ein kleines Beispiel Makro einfügen, wie das Array denn aussehen sollte.
    Wäre sehr nett von euch *Smilie

    @Luschi
    Dein Tipp erspart mir ungefähr die Hälfte der zeit.
    Dir auch vielen Dank!!!
     
  7. Hallo,

    ohne die Daten ist der Code nur schwer nachvollziehbar.

    Die verwendeten Funktionen kann man so im Array rechen:


    PHP:
             Dim WSF As WorksheetFunction
    Sub Mittelwert
    ()
    Set WSF Application.WorksheetFunction
    Ar 
    Range("A2:A6")
    MM WSF.Average(Ar)

    Su WSF.Sum(Ar)

    St_Dev WSF.StDev_P(Ar)
    Debug.Print MMSuSt_Dev
    End Sub
     
  8. Makro Laufzeit verkürzen

  9. Hallo,

    Also ich habe mal ein Test File hochgeladen...

    Bei mir scheitert es daran, dass ich eine For Schleife habe und je nachdem, was In Worksheet "Dummy" eingegeben wird, wird es so oft ausgeführt...

    Wäre es nur einmal auszuführen, wäre es easy das umzusetzen...
     
Thema:

Makro Laufzeit verkürzen

Die Seite wird geladen...
  1. Makro Laufzeit verkürzen - Similar Threads - Makro Laufzeit verkürzen

  2. Name der Datei durch Excel geändert

    in Microsoft Excel Hilfe
    Name der Datei durch Excel geändert: Hallo und guten Abend, Die Datei wird mittels Button (VBA) zwischen gesichert. Das Makro sichert zuvor die Datei und erstellt zus. eine Sicherungsdatei mit der Erweiterung Beispiel-"Sich"....
  3. Ein Makro für mehrere Register

    in Microsoft Excel Hilfe
    Ein Makro für mehrere Register: Moin, ich habe ein Makro wo Daten aus dem Register Master kopiert werden und Register, das mit einem Datum beschriftet ist. Ich möchte in Jedem Register ein Button haben was Daten aus dem Master...
  4. Makro öffnet unerwartete Datei

    in Microsoft Excel Hilfe
    Makro öffnet unerwartete Datei: Hallo Forum, ich brächte euer Schwarmwissen. Arbeite mit Excel eine Auftragsbearbeitung. Dort habe ich mir einen Button mit Makro erstellt und nutze diesen schon lange. Das Makro generiert ein...
  5. Leerzeilen entfernen

    in Microsoft Word Hilfe
    Leerzeilen entfernen: Hallo in die Runde, ich habe das Problem bzw. den Wunsch in einem DOC die Leerzeilen zu entfernen und das per Makro. Allerdings gelingt es nicht Hintergrund das DOC wird aus einer Dot-Datei...
  6. Makro Schaltflaechen vervielfaeltigen sich....

    in Microsoft Excel Hilfe
    Makro Schaltflaechen vervielfaeltigen sich....: Hallo Zusammen, ich habe eine Exceldatei, die seit ein paar Wochen sehr langsam zu öffnen und zu bearbeiten ist. Zuvor war sie ca. 8MB gross, was sich verdoppelt hat. Ich habe alle Zellen die...
  7. Seit Win 11 Zugriffsprobleme bei Excel über Makros

    in Microsoft Excel Hilfe
    Seit Win 11 Zugriffsprobleme bei Excel über Makros: Guten Tag! Ich habe vor einer Woche mein Windows 10 auf Windows 11 geupgraded, und seitdem habe ich extreme Schwierigkeiten mit meinem Excel. Mit Windows 10 funktionierte alles so, wie es sollte,...
  8. VBA-Makro zur Zellenformatierung Syntax probleme

    in Microsoft Excel Hilfe
    VBA-Makro zur Zellenformatierung Syntax probleme: Hallo zusammen, ich möchte per Makro Zellen formatieren. Tausender-Trennzeichen 3 Nachkommastellen Positive Zahlen Schwarz Negative Zahlen Rot Nullwert mit - Hinter der Zahl soll noch eine...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden