Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1420to1424
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
Inhaltsverzeichnis

Wie kann ich diesen Ablauf beschleunigen

Wie kann ich diesen Ablauf beschleunigen
15.04.2015 15:53:09
Karsten
Hallo
    For a = 6 To 85
Rows(a & ":" & a).RowHeight = 13.5
If Cells(a, 2) = "0" Then
Rows(a & ":" & a).RowHeight = 0
Else
Rows(a & ":" & a).RowHeight = 13.5
End If
Next a
Wenn in der Spalte B eine 0 steht, soll die Höhe auf 0 geändert werden.
Wenn etwas anderes in Spalte B steht, 13.5
Dieses Makro braucht "recht lange".
Gibt es eine einfacher Möglichkeit?
Gruß
Karsten

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie kann ich diesen Ablauf beschleunigen
15.04.2015 16:14:05
Ralf
Hallo Karsten,
ich konnte meine Makros dadurch beschleunigen, dass ich das Screenupdating auf false und die Kalkulation ausgeschaltet habe bis das makro durch war:
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With

natürlich danach wieder alles anschalten, ich weiß aber nicht ob das bei dir auch hilft :)
LG
Ralf

AW: Wie kann ich diesen Ablauf beschleunigen
15.04.2015 16:20:52
Karsten
Hi
Ja, so etwas ähnliches mache ich auch schon:
Sub Update_Ein()
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Sub Update_Aus()
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
End Sub
Ich werde das
.Calculation = xlCalculationManual

noch mit dazu nehmen.
Das Gegenteil ist dann:
.Calculation = xlCalculationAutomatic

?

Anzeige
AW: Wie kann ich diesen Ablauf beschleunigen
15.04.2015 17:12:06
Ralf
Ja korrekt :)
hoffe das hilft ein bisschen :)
LG
Ralf

AW: Wie kann ich diesen Ablauf beschleunigen
15.04.2015 17:13:16
Ralf
Ja korrekt :)
hoffe das hilft ein bisschen :)
Wichtig, sobald du das wieder auf automatic setzt wird die Tabelle neu berechnet, also wenn was geändert wurde was nicht berechnet werden soll, so solltest du die Berechnung erst wieder aktivieren wenn alles berechnet werden kann.
LG
Ralf

schneller: ohne Schleife
16.04.2015 12:19:31
Klaus
Hi Karsten,
schneller ist es, das ganze ohne Schleife zu erledigen. Dann macht Excel nur eine ausblenden-Operation statt vieler einzelner.
Zum Beispiel könnte man das per Autofilter lösen, das geht rasend schnell. Dazu muss aber zwingend in Zelle B5 etwas stehen - aber da hast du wahrscheinlich eh eine Überschrift?
Sub OhneSchleife()
Const SpalteCheck As Long = 2 'Spalte B
Const ZeileAb As Long = 6
Const ZeileBis As Long = 85
Const WertAusblenden As String = "0"
Const ZeileHoch As Long = 13.5
Const ZeileTief As Long = 0
Dim NullRange As Range
Application.ScreenUpdating = False
With ActiveSheet
.Rows(ZeileAb & ":" & ZeileBis).RowHeight = ZeileHoch
If .AutoFilterMode Then .Cells.AutoFilter 'Turns OFF Autofilter, if any
.Range(.Cells(ZeileAb - 1, SpalteCheck), .Cells(ZeileBis, SpalteCheck)).AutoFilter 'Turns  _
ON Autofilter on given range
.Cells(ZeileAb - 1, SpalteCheck).AutoFilter Field:=1, Criteria1:=WertAusblenden
On Error GoTo hell
Set NullRange = .Range(.Cells(ZeileAb, SpalteCheck), .Cells(ZeileBis, SpalteCheck)). _
SpecialCells(xlCellTypeVisible).EntireRow
.Cells.AutoFilter
NullRange.RowHeight = ZeileTief
On Error GoTo 0
hell:
If .AutoFilterMode Then .Cells.AutoFilter 'Turns OFF Autofilter, if any
Application.ScreenUpdating = True
End With
End Sub
Wenn du in dem Blatt bereits einen Autofilter nutzt (den das Makro dann abschaltet), dann ist es am einfachsten den am Makroende wieder einzuschalten.
Auch möglich wäre eine Hilfsspaltenlösung, das geht dann ganz ohne Autofilter.
Grüße,
Klaus M.vdT.

Anzeige
AW: schneller: ohne Schleife
16.04.2015 12:35:54
Karsten
Hi
So sah meine neue Lösung aus, auch schon schneller.
For a = 6 To 85
If Cells(a, 2) = "0" Then Exit For
Next a
Rows("6:" & a - 1).RowHeight = 13.5
Rows(a & ":85").RowHeight = 0
Range("A2:AI2").Select
Werde deins aber auch noch testen.
Schon mal DANKE für die Hilfe!!!
Karsten

AW: schneller: ohne Schleife
16.04.2015 12:48:00
Klaus
Hallo Karsten,
aus deinem Code lese ich heraus, deine Liste ist sortiert? Dann ist es ja noch einfacher:
Sub TEEEST()
a = WorksheetFunction.Match(0, Range("B6:B85"), False) + 5
Rows("6:" & a - 1).RowHeight = 13.5
Rows(a & ":85").RowHeight = 0
End Sub
Und ich behaupte, schneller wird es nicht :-)
Grüße,
Klaus M.vdT.

Anzeige
AW: schneller: ohne Schleife
16.04.2015 13:23:37
Daniel
Hi
prinzipell richtig, bis auf den dritten Parameter von Worksheetfunction.Match.
FALSE bzw 0 steht hier für "unsortierte Liste" und liefert immer die erste Fundstelle als Ergebnis.
Richtig wäre 1 für aufsteigend sortierte Daten.
Funktioniert so aber auch nur, wenn keine negativen Werte in Spalte B vorkommen, die noch vor der 0 stehen würden.
Gruß Daniel

AW: schneller: ohne Schleife
16.04.2015 14:41:32
Karsten
Hat so funktioniert, wie Klaus M.vdT. es geschrieben hat.

AW: Wie kann ich diesen Ablauf beschleunigen
15.04.2015 17:29:21
Michael
Hallo Karsten!
Außerdem kannst Du noch eine Zeile in Deinem Code weglassen:
For a = 6 To 85
' Warum setzt Du zunächst alle Zeile auf 13,5
' nur um dann zu entscheiden ob 0 oder 13,5 gesetzt wird?
'Rows(a & ":" & a).RowHeight = 13.5 ' = unnötig
If Cells(a, 2) = "0" Then
Rows(a & ":" & a).RowHeight = 0
Else
Rows(a & ":" & a).RowHeight = 13.5
End If
Next a
LG Michael

Anzeige
AW: Wie kann ich diesen Ablauf beschleunigen
16.04.2015 12:37:10
Karsten
Danke für den Hinweis.
Stimmt natürlich.

AW: Wie kann ich diesen Ablauf beschleunigen
15.04.2015 17:35:07
Daniel
Hi
Spricht was dagegen, die Zeilenhöhe generell auf 13.5 zu setzen und die Zeilen mit 0 über den Autofilter auszublenden?
Das braucht dann eine Codezee und ist sehr schnell.
Such wenn man VBA programmieren will, darf man die vorhandenen Excelfunktionen im VBA-Code verwenden.
Gruß Daniel

241 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige