HERBERS Excel-Forum - das Archiv
Autofilter - Ergebnisse kopieren
Jochen

Hallo liebes Forum,
bisher habe ich immer still und heimlich mitgelesen, doch dieses mal komme ich nicht weiter. Google und die Forumsuche haben mir bisher auch nicht weitergeholfen.
Ich hoffe ihr könnt mir weiterhelfen.
Und zwar habe ich mir eine Datenbasis geschaffen, welche ich mehrmals mittels VBA und Autofilter abfrage. Ich habe mich für den Autofilter entschieden, weil ich gemerkt habe, dass Schleifen die Performance zu stark beeinträchtigen bei der Anzahl an Anfragen.
Ich habe mein Problem bisher so gelöst:

With ws_2
'Kalenderwoche filtern
.Range("A2:I" & lngletzte).AutoFilter Field:=1, Criteria1:=UserForm2.ComboBox1.Text
'Leere Zellen ausblenden
.Range("A2:I" & lngletzte).AutoFilter Field:=8, Criteria1:="<>", Operator:=xlAnd
'Prozesse kopieren
.Range("H3:H" &.Cells(Rows.Count,8).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy
ws_7.Range("D3").PasteSpecial Paste:=xlPasteValues 'Ziel
Application.CutCopyMode = False 'Zwischenspeicher löschen
.ShowAllData
End With
Jetzt zu meiner Frage. Gibt es irgendwie eine Möglichkeit auf Copy/Paste zu verzichten, z.B. mittels .Value? Denn auch hier leidet die Performance sehr, welche dennoch schneller ist als alles mittels Schleife abzufangen.
Vielen Dank für eure Mithilfe.
Beste Grüße
Jochen

AW: Autofilter - Ergebnisse kopieren
Daniel

Hi
ein Ziel.Value = Quelle.Value funktioniert nur mit einen rechteckigem und lückenlosen Zellbereich.
damit das in einer gefilterten Tabelle funktioniert, müsstest du die Tabelle vor dem Filtern nach den Filterspalten sortieren, so dass die sichtbaren Zeilen einen lückenlosen, rechteckigen Zellbereich bilden.
Wenn du diese Sortierung vornimmst, müsste aber auch das Copy-Paste deutlich schneller werden. dann würde ich auch das verwenden, weil du hier beim Zielbereich nur die obere linke Zelle angeben musst, während du bei .Value = .Value erst noch die Grösse des gefilterten Bereichs ermitteln musst, weil hier Quell- und Zielbereich gleich gross sein müssen.
Gruß Daniel

AW: Autofilter - Ergebnisse kopieren
Jochen

Hallo Daniel, das werde ich mal versuchen. Danke
Ich hoffe das sortieren frisst nicht soviel Performance.
Bei Gelegenheit gebe ich Rückmeldung.
Jochen

AW: Autofilter - Ergebnisse kopieren
Daniel

beim Sortieren ist Excel sehr schnell.
Problematisch wird's nur dann, wenn du noch rechenintensive Formeln hat, die beim Filtern und Sortieren neu berechnet werden.
Da diese Neuberechnung aber oft nicht notwendig ist, kann man dann voher die automatische Neuberechnung der Formeln deaktivieren:
Application.Calculation = xlCalculationManual
und hinterher wieder einschalten
Application.Calculation = xlCalculationAutomatic
Gruß Daniel

AW: Autofilter - Ergebnisse kopieren
Jochen

Hallo daniel,
also bis jetzt läuft es flüssig. Das mit dem automatisch neu berechnen habe ich schon beachtet. Vielen Dank erstmal und einen schönen Feierabend!

AW: Autofilter - Ergebnisse kopieren
Jochen

Hallo daniel,
also bis jetzt läuft es flüssig. Das mit dem automatisch neu berechnen habe ich schon beachtet. Vielen Dank erstmal und einen schönen Feierabend!

Autofilter - Ergebnisse kopieren
Jochen

Hallo liebes Forum,
bisher habe ich immer still und heimlich mitgelesen, doch dieses mal komme ich nicht weiter. Google und die Forumsuche haben mir bisher auch nicht weitergeholfen.
Ich hoffe ihr könnt mir weiterhelfen.
Und zwar habe ich mir eine Datenbasis geschaffen, welche ich mehrmals mittels VBA und Autofilter abfrage. Ich habe mich für den Autofilter entschieden, weil ich gemerkt habe, dass Schleifen die Performance zu stark beeinträchtigen bei der Anzahl an Anfragen.
Ich habe mein Problem bisher so gelöst:

With ws_2
'Kalenderwoche filtern
.Range("A2:I" & lngletzte).AutoFilter Field:=1, Criteria1:=UserForm2.ComboBox1.Text
'Leere Zellen ausblenden
.Range("A2:I" & lngletzte).AutoFilter Field:=8, Criteria1:="<>", Operator:=xlAnd
'Prozesse kopieren
.Range("H3:H" &.Cells(Rows.Count,8).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy
ws_7.Range("D3").PasteSpecial Paste:=xlPasteValues 'Ziel
Application.CutCopyMode = False 'Zwischenspeicher löschen
.ShowAllData
End With
Jetzt zu meiner Frage. Gibt es irgendwie eine Möglichkeit auf Copy/Paste zu verzichten, z.B. mittels .Value? Denn auch hier leidet die Performance sehr, welche dennoch schneller ist als alles mittels Schleife abzufangen.
Vielen Dank für eure Mithilfe.
Beste Grüße
Jochen

AW: Autofilter - Ergebnisse kopieren
Daniel

Hi
ein Ziel.Value = Quelle.Value funktioniert nur mit einen rechteckigem und lückenlosen Zellbereich.
damit das in einer gefilterten Tabelle funktioniert, müsstest du die Tabelle vor dem Filtern nach den Filterspalten sortieren, so dass die sichtbaren Zeilen einen lückenlosen, rechteckigen Zellbereich bilden.
Wenn du diese Sortierung vornimmst, müsste aber auch das Copy-Paste deutlich schneller werden. dann würde ich auch das verwenden, weil du hier beim Zielbereich nur die obere linke Zelle angeben musst, während du bei .Value = .Value erst noch die Grösse des gefilterten Bereichs ermitteln musst, weil hier Quell- und Zielbereich gleich gross sein müssen.
Gruß Daniel

AW: Autofilter - Ergebnisse kopieren
Jochen

Hallo Daniel, das werde ich mal versuchen. Danke
Ich hoffe das sortieren frisst nicht soviel Performance.
Bei Gelegenheit gebe ich Rückmeldung.
Jochen

AW: Autofilter - Ergebnisse kopieren
Daniel

beim Sortieren ist Excel sehr schnell.
Problematisch wird's nur dann, wenn du noch rechenintensive Formeln hat, die beim Filtern und Sortieren neu berechnet werden.
Da diese Neuberechnung aber oft nicht notwendig ist, kann man dann voher die automatische Neuberechnung der Formeln deaktivieren:
Application.Calculation = xlCalculationManual
und hinterher wieder einschalten
Application.Calculation = xlCalculationAutomatic
Gruß Daniel

AW: Autofilter - Ergebnisse kopieren
Jochen

Hallo daniel,
also bis jetzt läuft es flüssig. Das mit dem automatisch neu berechnen habe ich schon beachtet. Vielen Dank erstmal und einen schönen Feierabend!

AW: Autofilter - Ergebnisse kopieren
Jochen

Hallo daniel,
also bis jetzt läuft es flüssig. Das mit dem automatisch neu berechnen habe ich schon beachtet. Vielen Dank erstmal und einen schönen Feierabend!

Dialog-Beispiele
Bewerten Sie hier bitte das Excel-Portal