Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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é
Antworten 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
Antworten 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)
Antworten 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.
Antworten 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)
Antworten 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? ;)
Antworten 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)
Antworten 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)
Antworten 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.
Antworten 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
Antworten Top


Gehe zu:


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