Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Thema Autofilten via Makro - schnellere Methoden?

Thema Autofilten via Makro - schnellere Methoden?
14.09.2023 10:06:02
Frank Dreier
Hallo Leute,

habe eine Datei die unter Excel 50 MB groß ist, 6 Tabellenblätter a 45000 Zeilen. Wenn ich nun einen Filter via Makro setze in einem der Tabellenblätter mit 45000 Zeilen und die "nicht leeren" nur anzeigen lasse (ca. 150 gefüllte von 45000) dann dauert das pro Filter setzten ca. 6 Sekunden.

-Automatische Berechnungen sind schon aus
-Filtersetzung Manuell dauert genauso lange.

Gibt es hier via Makro noch eine schnellere Methode? -Alles ist erlaubt. (z.B. auch Nur die zu Filternde Spalte herauskopieren mit Werten ohne Formel und extra ein neues Datenblatt öffnen, hineinkopieren und hier filtern etc.)

Welche Methode zum Filtern benutzt Ihr? Ich weiß, einige kicken einfach die leeren Zeilen heraus via Makro aber ich glaube bei der Konstellation (45000 Zeilen und davon 44850 Leerzeilen) ist das keine gute Idee.

Habt Ihr gute "Filtermethoden?"
Lieben Gruß!

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
erst mal Gegenfragen
14.09.2023 10:17:53
Oberschlumpf
Hi Frank,

du schreibst...
a) "habe eine Datei ..., 6 Tabellenblätter a 45000 Zeilen...
...dann schreibst du...
b) "...bei der Konstellation (45000 Zeilen und davon 44850 Leerzeilen)...

Aber in Summe sind das in a) dann doch 45000 + 44850 = 99850 Zeilen und nicht "nur" 45000.
Oder wie jetzt?


Und angenommen, es würden bei der zu filternden Spalte nur die Werten ohne Formel kopiert und in einem neuen Datenblatt eingefügt, und dort gefiltert - was ist dann mit den Werten aus den anderen Spalten des eigentlichen Blattes?

Ciao
Thorsten
Anzeige
Thema Autofilten via Makro - schnellere Methoden?
14.09.2023 11:15:13
Pierre
Hallo Frank,

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)


Dim i As Long
Dim a As Long

For a = 1 To ThisWorkbook.Worksheets.Count

With Worksheets(a)
For i = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If .Cells(i, 1).Value = "" Then
.Rows(i).Delete shift:=xlUp
End If
Next i
End With
Next a

End Sub


Dies ins Modul "DieseArbeitsmappe". Kannst auch ein anderes Event nutzen, z. B. bei Rechtsklick.

Könnte auch über Array gehen, vielleicht schneller, damit kenne ich mich aber nicht aus.
VIelleicht hilft dir dafür dieser Link weiter: https://www.herber.de/forum/archiv/1472to1476/1475838_Zeilen_in_Array_loeschen.html

Gruß Pierre
Anzeige
Thema Autofilten via Makro - schnellere Methoden?
14.09.2023 11:25:28
Yal
Hallo Frank,

da es sich um eine reine Datentransformationsproblem ist, bietet sich mit Power Query zu arbeiten. Du müsstest auf Excel 2016 oder höher upgraden.

Investiere eine Stunden, diese Seite durchzugehen und die Videos anzuschauen
https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

VG
Yal
Thema Autofilten via Makro - schnellere Methoden?
14.09.2023 11:17:26
Pierre
Ach, sorry...

Das Makro ist nur, um die Leerzeilen zu eliminieren, danach kannst du dann beliebig filtern, sollte dann hoffentlich deutlich schneller gehen.

Ich habe jetzt übrigens nicht mit deinen Vorgaben (45.000 Zeilen usw.) getestet, das müsstest du mal übernehmen.
Anzeige
Danke für die Tipps
14.09.2023 11:25:42
Frank Dreier
Vielen Dank für Eure Anregungen, ich teste mal alles. Das Kopieren der Werte (ohne Formeln) und dann entsprechendes Filtern ist wohl die schnellste Methode.
Die Formatierungen bringe ich dann ganz am Ende rein, die Kosten auch viel Zeit.

Vielen Dank erstmal!
erst mal Gegenfragen
14.09.2023 10:32:56
Frank Dreier
Hallo Thorsten!

Also es sind 45000 Zeilen insgesamt. Davon von Spalte A - R Formeln, Spalte S sind dann die Werte drin die gefiltert werden sollen.
Spalte S enthält ca. 44850 Leere Zellen und ca. 150 gefüllte. Diese 150 Werte benötige ich. Wenn ich nun via Makro einen Filter setze, dauert das ca. 6 Sekunden bis die Werte gefiltert sind.

Thorsten fragt:

Und angenommen, es würden bei der zu filternden Spalte nur die Werten ohne Formel kopiert und in einem neuen Datenblatt eingefügt, und dort gefiltert - was ist dann mit den Werten aus den anderen Spalten des eigentlichen Blattes?

Stimmt Thorsten, die anderen Spalten sollten auch noch da sein nach der Filterung. Also Spalte S alleine reicht nicht im neuen Datenblatt, müsste alles kopiert werden von Spalte A bis S allerdings ohne Formel wäre möglich, also nur die Werte.

- die gefilterten Werte werden in ein andere Datei, eine Auswertungsdatei übertragen via Makro (diese ist auch geöffnet, aber nur 500 kb groß). Daher kann in diesem speziellen Fall eigentlich ziemlich unkonventionelle Filtermethoden benutzt werden (wie eben das kopieren nur von Spalte A bis S ungefiltert in eine neue Datei und dann hier Filtern. Das geht natürlich schneller, muss ich noch ausprobieren).

Ich glaube hier hatte mal jemand im Forum gemeint mit sortieren kann Excel schneller arbeiten als mit dem Filter via Makro. Lieben Gruß
Anzeige
auch, wenn schon viele...
14.09.2023 11:54:27
Oberschlumpf
Hi Frank,

...andere Ideen vorgeschlagen werden, hier nun noch meine :-)

Userbild

ich HAB MAL ne Bsp-Datei mit sogar über 45.000 Zeilen erstellt - auch, obwohl ich es gar nicht mag, Bsp-Dateien zu erstellen, weil meist zu wenig Infos vom Fragenden (von Zell-Formaten hast du im Erst-Beitrag gar nix erwähnt!)

Aber ok, sogar meine Bsp-Datei, nur 1 Tabellenblatt, ohne Formate, ist trotzdem über 8MB groß - und deswegen, auch mit ZIP, hier nicht uploadbar.

Nun denn, wie du siehst, sind auch die Spalten A bis S mit Formeln "gefüllt".
Und ja, hier den Autofilter - auf Spalte S mit Anzeige von nur "x"-Einträgen - einzusetzen, dauert sogar 10 Sekunden!

Somit hab ich diesen Code entwickelt:



Sub sbCopyValIntoNewTempSheet()

Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = "temp"

With Sheets("Tabelle1") 'wenn Blattname im Original nicht "Tabelle1", dann hier anpassen
.Range("A1:S" & .Cells(.Rows.Count, 1).End(xlUp).Row).Copy
With Range("A1")
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.AutoFilter
End With
Application.CutCopyMode = False
End With

Range("A1:S" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFilter Field:=19, Criteria1:=">"

End Sub


1. es wird ans Ende aller Blätter ein neues Blatt hinzugefügt und erhält den Namen "temp"
2. aus meiner Datei, Blattname "Tabelle 1", werden alle Zellen im Bereich A1:S + letzte Zeile in Spalte A kopiert
3. im neuen Blatt "temp" werden die zuvor kopierten Zellen nur als Werte eingefügt
4. im neuen Blatt "temp" wird der Autofilter eingeschaltet
5. in Spalte S wird so gefiltert, dass nur Zeilen mit "x" in Spalte S angezeigt werden (Criteria:= ">" hab ich vom Rekorder übernommen; bedeutet wohl: "NUR Zellen MIT Inhalt"

Jetzt die Zeit, bis Filtern fertig ist = mit meinem Kopf nicht messbar, so schnell! :-)....und hier noch Start- und Endzeit für filtern zu programmieren, hatt ich keine Lust :-)

Hilfts?

Ciao
Thorsten
Anzeige
auch, wenn schon viele...-Thorsten
14.09.2023 12:07:32
Frank Dreier
Hallo, ja genauso habe ich es gelöst, haha. Ich muss leider immer öfter bei Excel tricksen. Das öffnen der riesen Dateien (36 Stück bei mir) um die Daten herauszuziehen kann ich leider nicht beschleunigen :(.

Aber so ist das nun mal bei großen Datenmengen. Vielen Dank!
auch, wenn schon viele...-Thorsten
14.09.2023 13:52:15
Yal
Hallo Frank,

liegen alle deine 36 Dateien in einem Verzeichnis oder Unterverzeichnis eines gemeinsammen Verzeichnis?
Haben deine Dateien ein erkennbare Namensmuster?

Dann kommt erst recht Power Query in Frage. Das wäre Pkt 5 in dem Link, den ich den anderen Beitrag gepostet habe (oder nacht "power query ganz leicht erklärt"):
mehrere Dateien aus einem bzw mehreren Verzeichnis in einem Zug zusammenbringen. Darüber hinaus importiert PQ nur die Zeile, die Du brauchst. Also nicht 36 * 48.000 sondern 36 * 150. Ohne die Dateien zu öffnen.

Ich will PQ nicht verkaufen, aber irgendwie schmerz es mir, wenn so viele Komplexität aufgetischt wird, um Lösung nachzubauen, die PQ quasi "out of the box" mitbringt.
Für PQ müsstest Du dein Excel auf mind. Version 2016, was auch für viele andere Themen auch nicht verkehrt wäre.

VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige