Excel Marko sehr langsam

Nico_B

Lt. Junior Grade
Dabei seit
Sep. 2010
Beiträge
327
#1
Mahlzeit.

Ich habe mir ein Makro erstellt, dass über einen Button bestimmte Zeilen ausblendet. Leider ist es sehr langsam. Vielleicht habt ihr einen vorschlag mit dem ich den Code optimieren kann:

Code:
Sub Werte_einblenden()

    Dim i As Double
    Dim j As Double
    v = Sheets("Optionen").Range("B227").Value
    b = Sheets("Optionen").Range("B228").Value
    v1 = Sheets("Optionen").Range("B227").Value
    b1 = Sheets("Optionen").Range("B228").Value
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Cells.Select
    
    Selection.EntireRow.Hidden = False
    For i = v To b
        If Cells(i, 45) = "x" Then
            Rows(i).Hidden = False
        End If
    Next i
    For j = v1 To b1
        If Cells(j, 45) = "Null" Then
            Rows(j).Hidden = True
        End If
    Next j
    Columns("AS").Select
    Selection.EntireColumn.Hidden = True
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Range("A1").Select
    
End Sub
 
Dabei seit
Jan. 2009
Beiträge
208
#2
Moin,
ich denke, dass ein ganz normaler Autofilter (wegen der Zahlen/Werte in B227/228 gerne auch per VBA) zielführender wäre, was die Geschwindigkeit betrifft.
 
Dabei seit
Apr. 2018
Beiträge
181
#3
Variabeln koennen mehrfach verwendet werden, also kannst du dir die doppelten sparen.
Dann kannst du dir schon einmal eine Schleife einsparen.
Wenn es nur zwei Status gibt, kannst du beim if-Befehl mit "else" einen weiteren Anweisungblock einleiten, der durchgefuehrt wird, sobald die Bedingung nicht erfuellt wird.
Alle Befehle mit select oder Selection ergeben fuer mich keinen Sinn ...
Die Abfragen sollten auch ohne gehen.

Am Ende willst du doch nur, dass eine Tabelle gefiltert wird ...
Schau dir mal den Befehl "Range.Autofilter" an.
Damit sparst du dir die Schleifen und die fressen Zeit.
 
Dabei seit
Juni 2018
Beiträge
56
#4
Ungetestet:
Code:
Sub Werte_einblenden()

    Dim i As Double
    v = Sheets("Optionen").Range("B227").Value
    b = Sheets("Optionen").Range("B228").Value
   
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Cells.Select
   
    Selection.EntireRow.Hidden = False
    For i = v To b
    If Cells(i, 45) = "x" Then
            Rows(i).Hidden = False
    ElseIf Cells(i, 45) = "Null" Then
            Rows(i).Hidden = True
    End If
    Next i
    Columns("AS").Select
    Selection.EntireColumn.Hidden = True
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Range("A1").Select
   
End Sub
 

Janush

Lt. Junior Grade
Dabei seit
Mai 2008
Beiträge
413
#5
Mir fehlen hier ein paar Infos....wenn das Teil SEHR langsam ist, liegt es entweder daran, dass du hier SEHR viele Zeilen verstecken möchtest, oder dass am Ende, wenn du auf automatische Berechnung zurück schaltest, SEHR viele Formeln aktualisiert werden.

Also, wie sieht der Rest des Spreadsheets aus und um wie viele Zeilen geht es eigentlich?
 
Dabei seit
Mai 2011
Beiträge
623
#6
Ich hab mir jetzt den Code nicht im Einzelnen angeschaut, aber ich hatte einmal ein ähnlihes problem. Gelöst hatte ich es indem ich den Seitenrefresh nicht nach jeder Aktion ausgeführt habe, sondern nur ganz am Ende nachdem alle Zeilen ein- oder ausgeblendet waren.
 
Top