Zeilen ausblenden
#1
Hallo!

    For i = rngVert To 151
       If Range("J" & i).Value = "0" Then Range("J" & i).EntireRow.Hidden = True
    Next i


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Kann man das Ausblenden ohne sie in einer Schleife zu durchlaufen? Oder kann man das Ausblenden verbessern oder "beschleunigen"?

Gruß, René
Top
#2
Hallo,

die m.E. aus Performance-Sicht schnellste Methode wäre die Verwendung eines Autofilters, den Du auch in einer ausgeblendeten Spalte + Formel ablegen kannst.
Alternativ könnte man auch einen Algo entwickeln, der blockweise ausblendet, liefert etwas mehr Performance aber erreicht nicht den Autofilter.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Top
#3
Moin René!
Warum filterst Du Spalte J nicht einfach nach <>0
Du kannst es ja per VBA machen und VisibleDropDown:=False setzen.
Dann sieht man nicht, dass eigentlich gefiltert wurde.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#4
Filter sollen nicht verwendet werden. Es soll schon eine VBA-Lösung sein (Nullzeilen ausblenden, Drucken, Zeilen wieder einblenden). Nur finde ich es nicht fein Zellen in Schleife zu durchlaufen.
Top
#5
Dann mal per temp. Array:
Sub RPP()
Dim cnt&, tmpArr
Dim rngZeilen As Range
tmpArr = Range(Cells(1, "J"), Cells(1, "J").End(xlDown)).Value
For cnt = 1 To Ubound(tmpArr)
   If tmpArr(cnt, 1) = 0 Then
      If rngZeilen Is Nothing Then
         Set rngZeilen = Rows(cnt)
      Else
         Set rngZeilen = Union(rngZeilen, Rows(cnt))
      End If
   End If
Next
rngZeilen.EntireRow.Hidden = True
End Sub

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#6
Behandelt "tmpArr" nicht die gesamte Spalte? Es sollen aber nur bestimmte Zeilen (z.B. von 10 bis 151) berücksichtigt werden.
Und ist das nicht auch eine Schleife? ;)
Top
#7
Zitat:Behandelt "tmpArr" nicht die gesamte Spalte?
Nö, nur den gefüllten Bereich in J.
Zitat:Es sollen aber nur bestimmte Zeilen (z.B. von 10 bis 151) berücksichtigt werden.
Dann starte halt ab Cells(10, "J") oder code hart: RAnge("J10:J151")
Zitat:Und ist das nicht auch eine Schleife?
Ja, aber eine wahrscheinlich 100mal schnellere als Deine. ;)
Im Arbeitsspeicher (also ohne langsame Zellzugriffe) wird der Range zusammengesetzt.
Das Wichtigste: Der Bereich wird auf einen Schlag ausgeblendet.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#8
Noch was:
Zitat:Es soll schon eine VBA-Lösung sein (Nullzeilen ausblenden, Drucken, Zeilen wieder einblenden).
Gerade dann solltest Du meinen ersten Tipp beherzigen: Autofilter!
So ganz ohne Schleifchen.  :05:

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#9
Ich komme damit nicht zurecht. Es soll z.B. nur J10 bis J20 berücksichtigt werden. Alles davor und danach nicht. Da ist meine Schleife schon einfacher.
Top
#10
Hi,

Code:
Sub RPP_and_ck()
Dim cnt&, tmpArr
Dim int_start As Integer, int_Ende As Integer, za As Integer
Dim rngZeilen As Range
int_start = 10
int_Ende = 20
tmpArr = Range(Cells(int_start, "J"), Cells(int_Ende, "J"))
For cnt = int_start To int_Ende
    za = za + 1
   If tmpArr(za, 1) = 0 Then
      If rngZeilen Is Nothing Then
         Set rngZeilen = Rows(cnt)
      Else
         Set rngZeilen = Union(rngZeilen, Rows(cnt))
      End If
   End If
Next
If Not rngZeilen Is Nothing Then
    rngZeilen.EntireRow.Hidden = True
End If
End Sub
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
[-] Folgende(r) 1 Nutzer sagt Danke an chris-ka für diesen Beitrag:
  • mumpel
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste