Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Nach Filtern sichtbare Zeilen löschen VBA Code optimieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Nach Filtern sichtbare Zeilen löschen VBA Code optimieren (9142 mal gelesen)
CADdoctor
Mitglied
Technischer Zeichner (Versorgungstechnik)


Sehen Sie sich das Profil von CADdoctor an!   Senden Sie eine Private Message an CADdoctor  Schreiben Sie einen Gästebucheintrag für CADdoctor

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 = False

konnte 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




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 27. Feb. 2012 12:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADdoctor 10 Unities + Antwort hilfreich

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)


Sehen Sie sich das Profil von CADdoctor an!   Senden Sie eine Private Message an CADdoctor  Schreiben Sie einen Gästebucheintrag für CADdoctor

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 27. Feb. 2012 14:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADdoctor 10 Unities + Antwort hilfreich

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)


Sehen Sie sich das Profil von CADdoctor an!   Senden Sie eine Private Message an CADdoctor  Schreiben Sie einen Gästebucheintrag für CADdoctor

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz