Anzeige
Archiv - Navigation
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
972to976
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zeilen ausblenden Code ist sehr langsam

Zeilen ausblenden Code ist sehr langsam
06.05.2008 08:26:25
Mazilu
Hallo,
ich möchte in meiner Exceldatei zeilen immer ausblenden wenn in spalte AK ein x steht (Es sollen also immer nur die Zeilen angezeigt werden in denen kein X steht, da x variabel ist je nach Einstellungen erscheint oder nicht). Datzu habe ich folgenden code, mein Problem ist jedoch das dieser Code super lange dauert bis er durchgelaufen ist. gibt es vielleicht etwas was schneller funktioniert?

Sub ausblenden()
Dim i As Long
For i = 137 To 387
If Range("AK" & i) = "x" Then
Range("AK" & i).Rows.Hidden = True
End If
Next
End Sub


14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen ausblenden Code ist sehr langsam
06.05.2008 08:31:46
Matthias
Hallo

Sub ausblenden()
Application.ScreenUpdating = False
Dim i As Long
For i = 137 To 387
If Range("AK" & i) = "x" Then
Range("AK" & i).Rows.Hidden = True
End If
Next
Application.ScreenUpdating = True
End Sub


Hilft's?
Gruß Matthias

AW: Zeilen ausblenden Code ist sehr langsam
06.05.2008 08:33:56
Hajo_Zi
Hallo,
es ist kein If notwendig. Ich vermute alle wo kein "x" stehen sollen eingeblendet werden.
Range("AK" & i).Rows.Hidden = Range("AK" & i) = "x"

wie war :o) __oT
06.05.2008 08:44:00
Matthias

ich meine WAHR ,sorry _oT
06.05.2008 08:46:13
Matthias

Anzeige
AW: Zeilen ausblenden Code ist sehr langsam
06.05.2008 08:50:07
kawensmann
Hallo,
hatte ich auch erst so versucht, braucht bei mir aber etwas länger, als die IF-Abfrage (Wenn man es mal mit 60000 Zeilen versucht ).
Noch ein Ansatz: (bei mir die schnellste Variante)

Dim c As Range
Application.ScreenUpdating = False
For Each c In Range("AK137:AK387")
If c.Value = "x" Then c.EntireRow.Hidden = True
Next
Application.ScreenUpdating = True


Gruß
Kawensmann

AW: Zeilen ausblenden Code ist sehr langsam
06.05.2008 08:40:32
Bertram
Hi,
also bei mir braucht dein Code keine Sekunde. Ist das zu langsam?
Habe es auch mal mit .EntireRow anstelle von .Rows probiert, macht aber keinen merklichen Unterschied.
Gruß
Bertram

Anzeige
auch wenn überall "x" steht ;o) ?
06.05.2008 08:44:00
Matthias
Hallo
Hajo hat schon recht
So ist es besser
Option Explicit

Sub ausblenden()
Application.ScreenUpdating = False
Dim i As Long
For i = 137 To 387
Range("AK" & i).Rows.Hidden = Range("AK" & i) = "x"
Next
Application.ScreenUpdating = True
End Sub


Gruß Matthias

Ja auch dann:-) mT
06.05.2008 08:49:23
Bertram
Allerdings ist die Variante ohne If bei mir langsamer.
Gruß
Bertram

AW: Ja auch dann:-) mT
06.05.2008 09:00:52
Matthias
Hallo Bertram,
kann es sein, dass du mit Excel XP arbeitest? Siehe mein Beitrag unten im Thread.
Gruß Matthias

Excel 2000
06.05.2008 09:19:30
Bertram
Hallo Matthias,
wenn Excel 2003 jeweils neu berechnet, dann klingt es logisch, dass es lange dauert.
Gruß
Bertram

Anzeige
AW: Versionsunterschied XP - 2003
06.05.2008 08:54:00
Matthias
Hallo Mazilu,
das Problem ist, dass ab Version 2003 alle Zeilen, die aus- oder eingeblendet werden, neu berechnet werden.
Der Grund dafür ist für mich nicht nachvollziehbar, mich hat das schon länger beschäftigt, bis ich es aufgegeben habe...
In deinem Fall hilft vielleicht ein Application.Calculation = xlCalculationManual zu Beginn (und ein Rücksetzen auf xlCalculationAutomatic bzw. den alten Wert am Ende) des Codes.
Bis zur Version 2002 (Excel XP) werden Zellen beim Ein- oder Ausblenden nicht neu berechnet. Warum auch? Die Werte haben sich ja nicht geändert.
Falle es jemanden interessiert, hier mein alter Formumsthread dazu (auf online-excel.de):
http://www.online-excel.de/fom/fo_read.php?f=1&bzh=0&h=11375
Gruß Matthias G
P.S.: An einer Lösung wäre ich nach wie vor interessiert!

Anzeige
AW: Zeilen ausblenden Code ist sehr langsam
06.05.2008 10:10:47
Rudi
Hallo,
du solltest erst alle Zeilen in einen Range packen und diesen auf einen Schlag ausblenden.

Sub AusblendenZeilenSchnell()
Dim i As Long, rngHide As Range
With ActiveSheet
For i = 1 To .UsedRange.Rows.Count
If .Cells(i, 37) = "x" Then
If rngHide Is Nothing Then
Set rngHide = .Rows(i)
Else
Set rngHide = Union(rngHide, .Rows(i))
End If
End If
Next
End With
rngHide.EntireRow.Hidden = True
End Sub


Gruß
Rudi

AW: Zeilen ausblenden Code ist sehr langsam
06.05.2008 10:15:51
Hajo_Zi
Hallo Rudi,
fehlt da nich If rnghide=Nothing then Ext Sub

Anzeige
CodeKorrektur
06.05.2008 10:21:23
Rudi
Hallo Hajo,
da hast du sehr Recht. Vlt. sollte man auch noch erst alle Zeilen einblenden.

Sub AusblendenZeilenSchnell()
Dim i As Long, rngHide As Range
With ActiveSheet
.Rows.Hidden = False
For i = 1 To .UsedRange.Rows.Count
If .Cells(i, 37) = "x" Then
If rngHide Is Nothing Then
Set rngHide = .Rows(i)
Else
Set rngHide = Union(rngHide, .Rows(i))
End If
End If
Next
End With
If Not rngHide Is Nothing Then rngHide.EntireRow.Hidden = True
End Sub


Gruß
Rudi

20 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige