Code Beschleunigen?

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
CheckBox TextBox
Bild

Betrifft: Code Beschleunigen?
von: Stefan
Geschrieben am: 12.06.2015 09:35:39

Hi Leute,
ich Kopiere momentan aus 3 Sheets (Range ca. A1:Z40) in ein "gesamt" Sheet. Es werden noch einige Sheets dazu kommen und es dauert jetzt schon ziemlich lange.
Könnte man hier noch was optimieren?

Private Sub start_Click()
Dim zelle As Long
Dim i As Long
Dim iZeile As Integer
Dim z as Integer
Application.ScreenUpdating = False
Worksheets("SystemFMEA").Visible = xlSheetVisible
Worksheets("SystemFMEA").Select
Worksheets("OverAlL").Visible = xlVeryHidden
For i = 1 To Sheets.Count
If Sheets(i).Name <> "Menu" And Sheets(i).Name <> "SystemFMEA" And _
Sheets(i).Name <> "Analysis" And Sheets(i).Name <> "OverAll" _
And Sheets(i).Name <> "list" And Sheets(i).Name <> "FMEA" Then
       With Worksheets(i)
    
           z = .Range("N" & Rows.Count).End(xlUp).Row
                      
       For zelle = 13 To z
              
        If IsNumeric(TextBox1.Value) = True And _
            Worksheets("OverAlL").CheckBoxTech.Value = True _ 
            And CheckBoxTech.Caption = .Range("B4").Value _
            And Worksheets("OverAlL").CheckBoxProd.Value = True _
            And CheckBoxProd.Caption = .Range("B4").Value _
            And Worksheets("OverAlL").CheckBoxSys.Value = True _
            And CheckBoxSys.Caption = .Range("B4").Value _
            And Worksheets("OverAlL").CheckBoxTool.Value = True _
            And CheckBoxTool.Caption = .Range("B4").Value _
            And Worksheets("OverAlL").CheckBoxNon.Value = True _
            And CheckBoxNon.Caption = .Range("B4").Value _
            Or Worksheets("OverAlL").ComboBox2.Value = Sheets(i).Range("B3").Value _            _
Or Worksheets("OverAlL").ComboBox2.Value = "" Then
            
        If .Range("N" & zelle).Value >= CInt(TextBox1.Value) _
           And .Range("N" & zelle).Value <> "" Then
            
           .Range("N" & zelle, "B" & zelle).Copy
          
           iZeile = Sheets("SystemFMEA").Cells(.Rows.Count, 9).End(xlUp).Row
           Sheets("SystemFMEA").Cells(iZeile + 1, 9).PasteSpecial xlPasteValues
          
           .Range("B2").Copy
         
           Sheets("SystemFMEA").Cells(iZeile + 1, 1).PasteSpecial xlPasteValues
           
           .Range("B3").Copy
           
           Sheets("SystemFMEA").Cells(iZeile + 1, 2).PasteSpecial xlPasteValues
                    
          
         End If
         'Else: Exit Sub
                
         End If
        Next zelle
        
    End With
End If
Next i
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Dankeschön :)
Grüße,
Stefan

Bild

Betrifft: AW: Code Beschleunigen?
von: Daniel
Geschrieben am: 12.06.2015 09:50:49
Hi
1. auf einen schnellen blick schaut es so aus, als wäre die Bediungsprüfung deines IFs unabhängig von der Schleifenvariable "Zelle" , dh bei jedem Schleifendurchgang kommt immer das gleiche raus.
dann sollte man die Bedingungsprüfung VOR der Schleife ausführen und nicht IN der Schleife
es gibt auch Bedingungen, die sind auch nicht abhängig von der erste Schleife mit i, diese Prüfungen solltest du ganz an den Anfang stellen.
2. wenn du viele Bediungen hast, die mit AND verbunden sind, dann ist es sinnvoller dies durch ineinander geschachtelte IF-Blöcke darzustellen:
Langsam ist

IF A AND B Then

Schneller ist:
IF A Then
    IF B Then

das liegt daran, dass im ersten Fall immer alle Bediungungen geprüft werden, im zweiten Fall wird B jedoch nur dann geprüft, wenn A bereits erfüllt ist und damit weniger oft.
Gruß Daniel


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zellennamen"