Registriert seit: 11.04.2014
Version(en): Office 365
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é
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
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 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
21.02.2017, 11:10
(Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2017, 11:11 von RPP63.)
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)
Registriert seit: 11.04.2014
Version(en): Office 365
21.02.2017, 11:13
(Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2017, 11:13 von mumpel.)
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.
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
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)
Registriert seit: 11.04.2014
Version(en): Office 365
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? ;)
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
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)
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
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)
Registriert seit: 11.04.2014
Version(en): Office 365
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.
Registriert seit: 14.04.2014
Version(en): Office 2013/2016/2019/365
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.
3a2920576572206973742064656e20646120736f206e65756769657269672e
Folgende(r) 1 Nutzer sagt Danke an chris-ka für diesen Beitrag:1 Nutzer sagt Danke an chris-ka für diesen Beitrag 28
• mumpel