Autor
|
Thema: Nach Filtern sichtbare Zeilen löschen VBA Code optimieren (9142 mal gelesen)
|
CADdoctor Mitglied Technischer Zeichner (Versorgungstechnik)
Beiträge: 313 Registriert: 12.05.2007 Software: AutoCAD MEP 2013 Excellink 2013 Windows 7 x64 Pro SP 1 Office 2010 SP 1 Mozilla Firefox 13.0.1 Mozilla Thunderbird 13.0.1<P>Hardware: ASUS P6T WS Professional Intel Core i7-920, 4x 2.67GHz PNY Quadro FX 1800 Kingston HyperX DIMM XMP Kit 6GB Kingston HyperX SSD 120GB, SATA 6Gb/s
|
erstellt am: 27. Feb. 2012 12:17 <-- editieren / zitieren --> Unities abgeben:
Hallo! Meine Tabelle hat ca. 934.000 Zeilen und 7 Spalten in denen nur Zahlen und keine Formeln stehen. Nach dem Filtern der Tabelle, möchte Ich alle sichtbare Zeilen löschen. (ca. 184180 Zeilen) Dazu habe Ich folgenden Code in verwendung: Code: Sub DatensaetzeLoeschen() Antwort = MsgBox("Alle sichtbaren Zeilen loeschen?", _ vbYesNo, "Zeilen loeschen") If Antwort = vbNo Then GoTo Ende Application.ScreenUpdating = False Application.DisplayAlerts = False Application.EnableEvents = False ErsteZeile = ActiveCell.CurrentRegion.Row + 1 ErsteSpalte = ActiveCell.CurrentRegion.Column LetzteZeile = ErsteZeile + _ ActiveCell.CurrentRegion.Rows.Count - 2 LetzteSpalte = ErsteSpalte + _ ActiveCell.CurrentRegion.Columns.Count - 1 Set SichtbarerBereich = Range(Cells(ErsteZeile, _ ErsteSpalte), Cells(LetzteZeile, _ LetzteSpalte)).SpecialCells(xlVisible) AnzahlBereiche = SichtbarerBereich.Areas.Count For Zaehler = 1 To AnzahlBereiche Range(SichtbarerBereich.Areas(1).Address).Delete _ Shift:=xlUp Next Application.ScreenUpdating = True Application.DisplayAlerts = True Application.EnableEvents = True Ende: End Sub
Durch das ausschalten von: Application.ScreenUpdating = False Application.DisplayAlerts = False Application.EnableEvents = Falsekonnte ich einen spürbaren Geschwindigkeitsvorteil feststellen. (ca.50 Minuten) Nun meine Frage, ist dieser VBA Code noch zu optimieren? ------------------ Mit freundlichen Grüßen CADdoctor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 27. Feb. 2012 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für CADdoctor
Hi, ich verstehe Dein Anliegen richtig: Du hast einen (Auto)Filter aktiv und möchtest alles jetzt noch Sichtbare löschen? Also alles, was nicht Zeilenhöhe = 0 hat, fliegt raus ->> Code: Sub SichtbaresLoeschen() If Sheets(1).Cells.Rows.Height <> 0 Then Rows.Delete End Sub
Ist zumindest mal ein klein wenig kürzer als Dein code ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADdoctor Mitglied Technischer Zeichner (Versorgungstechnik)
Beiträge: 313 Registriert: 12.05.2007 Software: AutoCAD MEP 2013 Excellink 2013 Windows 7 x64 Pro SP 1 Office 2010 SP 1 Mozilla Firefox 13.0.1 Mozilla Thunderbird 13.0.1<P>Hardware: ASUS P6T WS Professional Intel Core i7-920, 4x 2.67GHz PNY Quadro FX 1800 Kingston HyperX DIMM XMP Kit 6GB Kingston HyperX SSD 120GB, SATA 6Gb/s
|
erstellt am: 27. Feb. 2012 13:55 <-- editieren / zitieren --> Unities abgeben:
Hallo runkelrübe! Danke für den Code! Ich brauch jetzt nur mehr ca. 15 Minuten zum löschen. Allerdings überrascht mich die CPU Auslastung von 24% (4 Kerne) und die Speicherauslastung von 17% (706 MB) ein wenig. Sollten da nicht jeweils 100% stehen? ------------------ Mit freundlichen Grüßen CADdoctor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 27. Feb. 2012 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für CADdoctor
Grob überschlagen: 24% bei 4 Kernen = 99% auf einem Kern, die anderen 3 langweilen sich in der Gegend herum. Können sie aber nix für, wenn Excel ihnen nix zu arbeiten gibt. Paßt schon. Nachtrag: Ich seh grad, der link schimmelt schon, Office 2010 sollte multicore prinzipiell unterstützen, wir reden aber hier grad von VBA, ob das dabei gilt, entzieht sich leider meiner Kenntnis. Sorry, evtl. äußert sich zu diesem Thema noch ein Wissender, ich weiß nicht, ich lese nur internet und bilde mir dabei meine Meinungen. ;-) Bei anderen Programmen ist es übrigens ähnlich: multicore ja, wenn es die jeweilige Funktion erlaubt, aufgeteilt zu werden. Das geht nicht immer. ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADdoctor Mitglied Technischer Zeichner (Versorgungstechnik)
Beiträge: 313 Registriert: 12.05.2007 Software: AutoCAD MEP 2013 Excellink 2013 Windows 7 x64 Pro SP 1 Office 2010 SP 1 Mozilla Firefox 13.0.1 Mozilla Thunderbird 13.0.1<P>Hardware: ASUS P6T WS Professional Intel Core i7-920, 4x 2.67GHz PNY Quadro FX 1800 Kingston HyperX DIMM XMP Kit 6GB Kingston HyperX SSD 120GB, SATA 6Gb/s
|
erstellt am: 28. Feb. 2012 10:37 <-- editieren / zitieren --> Unities abgeben:
Danke für die Info! Dürfte wirklich so sein, dass die Multicore Unterstützung nur vereinzelt zur Anwendung kommt. Beim Kopieren von 7 Zellen mit Formeln auf 1.000.000 Zeilen wird der CPU nur zu ca. 24% ausgelastet. Bei der anschließenden Neuberechnung sind 8 Prozessoren in Verwendung und die CPU-Auslastung steigt kurzfristig auf 100%. ------------------ Mit freundlichen Grüßen CADdoctor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |