Autofiltrat als normale Zeilenausblendung übernehmen

Moderator: ModerationP

Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon lupo1 » 12. Jan 2017, 10:03

Da der

(a) Autofilter intelligenter und schneller massenhaft Zeilen ausblenden kann, als
(b) .EntireRow.Hidden mit .Offset und .Resize,

stellt sich die Frage, ob bzw. wie man (a) in (b) überführen könnte.

1. Eine Möglichkeit wäre schon mal, sich einfach mit (a) zu begnügen und als "netten zusätzlichen Gag" die Kopfzeile normal auszublenden, so dass man nicht unbeabsichtigt etwas ändert.

2. Wie überführt man aber "Weggefiltertes" in "Ausgeblendetes" direkt mit VBA?

Bin gespannt auf Eure Antworten!
MfG (und Hallo! natürlich auch) Lupo
Benutzeravatar
lupo1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7014
Registriert: 25. Okt 2012, 13:38

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon Jonas0806 » 12. Jan 2017, 10:25

Sowas in der Richtung?

Code: Alles auswählen
Sub x()
    Dim arr()
    Dim i: i = 1
   
    For Each rngzelle In Tabelle3.UsedRange
        If rngzelle.EntireRow.Hidden Then ReDim Preserve arr(i): arr(i) = rngzelle.Row: i = i + 1
    Next
    Tabelle3.Cells.AutoFilter
    For i = 1 To UBound(arr)
        Tabelle3.Rows(arr(i)).Hidden = True
    Next i
End Sub
______________
Gruß Jonas
Benutzeravatar
Jonas0806
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1039
Registriert: 08. Jan 2016, 11:47

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon lupo1 » 12. Jan 2017, 10:35

Das ist sicher auch sinnvoll in diesem Kontext (=Umkehrfunktionalität), Jonas.

Aber ich meinte es andersherum:

...
(2. war in anderen Worten:) Der Autofilter findet zuerst statt und soll dann in normal ausgeblendete Zeilen überführt werden.
...

Vielleicht habe ich Deinen Code auch nicht verstanden, da Du schon vor dem Filtern etwas machst. Ich hätte dort etwa schon bestehende ausgeblendete Zeilen erst mal eingeblendet.
MfG (und Hallo! natürlich auch) Lupo
Benutzeravatar
lupo1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7014
Registriert: 25. Okt 2012, 13:38

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon Jonas0806 » 12. Jan 2017, 10:57

Ich komme nicht ganz mit...

Das macht mein Code doch? Er durchläuft einen bereits (Mit dem Autofilter) gefilterten Bereich, schreibt alle "ausgefilterten" Zeilen in das Array, löscht den Autofilter und blendet anschließend (Ohne Autofilter) die vorher gefilterten Zeilen aus.

Oder habe ich doch noch was nicht verstanden?
______________
Gruß Jonas
Benutzeravatar
Jonas0806
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1039
Registriert: 08. Jan 2016, 11:47

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon lupo1 » 12. Jan 2017, 11:03

Nee, dann hast Du recht.

Dass man mit .Autofilter (im Sinne eines On-Off-Schalters) denselben löscht statt erstellt, liest sich halt nicht so leicht.
Und dass vorher autogefiltert ist, muss man evtl. dazusagen ;)

Wichtig wohl noch ScreenUpdating = False. Und möglicherweise geht ein .Union-Ausblenden schneller (notfalls in zusammengebauten Häppchen, und evtl. noch intelligent in Bereichen statt Einzelzeilen). Aber das müsste man anhand von 100000 Zeilen und wechselnden Zeilen (Filter ja und nein) zeitmessen.

Das Autofiltern in diesem Code ist derweil übrigens überflüssig geworden. Denn seine Bedingung lässt sich ja auch direkt an der betroffenen Spalte testen. Aber:

Fazit: Mit Nur-Autofilter ohne anschließendes Excel-Zeilen-Ausblenden bleibt das optisch gewünschte Zeilen-Ausblenden unerreicht schnell und lässt sich über das Ausblenden der Kopfzeile auch noch sehr gut absichern.
MfG (und Hallo! natürlich auch) Lupo
Benutzeravatar
lupo1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7014
Registriert: 25. Okt 2012, 13:38

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon heigöö » 12. Jan 2017, 11:57

Moin,

schneller als der Autofilter wird wohl nicht gehen, wenn es Dir um ausgeblendetes geht.
Macht aber irgendwie auch keinen Sinn, per Autofilter zu filtern, den Filter zurückzusetzen und dann die "Gefilterten Daten per Zeilenausblenden wieder zu filtern.

Alternativ könnte man sonst alle gefilterten Daten in ein Array schreiben, den Autofilter löschen und nur das Array dann in den Bereich ausgeben. Allerdings wäre das dann keine Filterung mehr.

Grüße
Gelegentlich vergesse ich die Begrüßung und/oder die Grußformel in meinen Beiträgen.
Ich bitte dieses zu entschuldigen und ergänze hiermit, wenn noch nicht im Post geschehen, die Begrüßung "Tach," bzw. die Grußformel "Grüße"
Benutzeravatar
heigöö
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 791
Registriert: 13. Apr 2016, 09:05

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon snb » 12. Jan 2017, 13:20

Ein Beispiel wäre vielleicht hilfreich gewesen.

Statt .autofilter 1,"aa5", usw.

Code: Alles auswählen
Sub M_snb()
   With Sheet1.Cells(1).CurrentRegion.columns(1)
      .Replace "aa5", ""
      .SpecialCells(4).EntireRow.Delete
   End With
End Sub
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4752
Registriert: 25. Sep 2014, 16:37

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon lupo1 » 12. Jan 2017, 15:11

Ups ... Delete war aber nicht gefragt. Die Zeilen sollen bestehen bleiben. Nur je nach Bedingung einfach blitzartig ausgeblendet.
MfG (und Hallo! natürlich auch) Lupo
Benutzeravatar
lupo1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7014
Registriert: 25. Okt 2012, 13:38

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon Grüßli » 12. Jan 2017, 16:04

Hi,

ich klink mich dann mal ein
gute Idee von snb

Code: Alles auswählen
Sub M_snb()
       With ActiveSheet.Cells(1).CurrentRegion.Columns(1)
          .Replace "A1", ""
          .SpecialCells(4).EntireRow.Hidden = True
          .SpecialCells(4).Replace "", "A1"
          '.Cells.EntireRow.Hidden = False       ' so wieder einblenden
       End With
    End Sub



Grüßli
Dieser Beitrag ist "for free", auf jeden Fall kostenlos und hoffentlich nicht umsonst.
Grüßli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4812
Registriert: 20. Okt 2011, 19:11

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon snb » 12. Jan 2017, 17:35

Wenn's nur um ausblenden geht:

Code: Alles auswählen
Sub M_snb()
    Columns(1).Replace "aa5", ""
   
    With Columns(1).SpecialCells(4).EntireRow
       .Hidden = Not .Hidden
       
       .Hidden = Not .Hidden
    End With
   
    Columns(1).SpecialCells(4) = "aa5"
End Sub
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4752
Registriert: 25. Sep 2014, 16:37

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon lupo1 » 12. Jan 2017, 17:50

Hm ... gibt es zu dem Code vielleicht noch etwas zu erklären? :P

Ich trage A1 sporadisch in mehreren Blöcken in die erste Spalte ein. Es werden die Zeilen mit leeren Spalte A-Einträgen ausgeblendet.

Am Ende wird nur der erste Block behandelt (die anderen gar nicht ausgeblendet).
MfG (und Hallo! natürlich auch) Lupo
Benutzeravatar
lupo1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7014
Registriert: 25. Okt 2012, 13:38

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon slowboarder » 12. Jan 2017, 18:08

Hi

hier ein einfache Möglichkeit:

1. schalte den Autofilter revers, dh du filterst alle Zeilen die ausgeblendet werden sollen

2. selektiere den Blattbereich

3. schränke die Selektion auf die sichtbaren Zellen ein (.SpecialCells(xlcelltypevisible)

4. hebe den Autofilter auf, sie Selektion sollte erhalten bleiben

5. blende die selektierten Zellen aus.

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 23406
Registriert: 18. Apr 2009, 13:33

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon lupo1 » 12. Jan 2017, 18:12

Danke, slowboarder. Das wäre der Autofilter.

Was aber machen Grüßli und snb? Ich hab nicht verstanden, was der Code bezwecken soll, und habe mit dem Eintragen von A1 in ein paar Zellen der Spalte A nichts bewirkt, was ich gut fände.
MfG (und Hallo! natürlich auch) Lupo
Benutzeravatar
lupo1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7014
Registriert: 25. Okt 2012, 13:38

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon Grüßli » 12. Jan 2017, 18:32

Hi Lupo1

macht er doch
statt "autozufiltern" wird in der entsprechenden Spalte der zu filternde Wert eleminiert und mit der Methode specialcells xlcelltypeblanks werden die zu "filternden" Zeilen ausgeblendet und der Wert anschliedend wiederhergestellt

Grüßli
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Grüßli am 12. Jan 2017, 18:43, insgesamt 1-mal geändert.
Dieser Beitrag ist "for free", auf jeden Fall kostenlos und hoffentlich nicht umsonst.
Grüßli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4812
Registriert: 20. Okt 2011, 19:11

Re: Autofiltrat als normale Zeilenausblendung übernehmen

Beitragvon slowboarder » 12. Jan 2017, 18:34

Hi
weiß ich jetzt auch nicht so genau was die anderen machen.
sieht nach der Methode aus:
- im ungefilterten Zustand eine Hilfsspalte mit einem Wert befüllen
- in der Hilfsspalte die Inhalte löschen, in den ausgeblendeten Zellen bleiben die Werte stehen
- autofilter aufheben und über die SpecialCells in Spalte A alle Zellen mit Inhalt selektiern und ausblenden.

wenns dir reicht, die Buttons des Autofilters in der ersten Zeile auszublenden, dann geht das auch.
verwende hierzu beim aktivieren des Autofilters die Eigenschaft: VisibleDropDown:=False

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 23406
Registriert: 18. Apr 2009, 13:33

Nächste

Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste