Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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

Durchlaufgeschwindigkeit erhöhen

Durchlaufgeschwindigkeit erhöhen
08.11.2023 17:29:11
KölscheJung
Liebe Forumsgemeinde,
bereits zweimal habt Ihr mir bei einem VBA Problem helfen können.
Nach gut drei Jahren, in denen das Programm (Leistungserfassung + Auswertung) auch dank eurer Hilfe einwandrei läuft, wird die Menge an Daten zum Problem.
Kurz zum grundsätzlichen Aufbau der Leistungserfassung sowie Auswertung:
Kleines Unternehmen, in denen jeder der 15 Mitarbeiter seine Leistung über eine Eingabemaske erfasst. Zum Monatsabschluss wird der jeweilige Monat (in der Regel von mir) ausgewertet. Auf Grund der Menge an Daten (ca. 5000 Vorgänge erfasst) dauert die Auswertung mittlerweile extrem lange (bis zu 15 Minuten). Die typischen Bausteine zur Geschindigkeitserhöhung (Application.ScreenUpdating = False; Application.DisplayAlerts = False) sind bereits in den Code integriert.
Einer kurze Erklärung des Auswertungsvorgangs:
Durch einen Click auf den Button "Auswertung" auf dem Tabellenblatt "Leistungsmeldung" gelangt man auf eine Maske in der drei Optionen zur Auswertung dargestellt sind. Bisher wird dort eine Auswahl getroffen (bspw. Jahr: 2021; Monat: Januar) und mit einem Click auf den Button "Auswertung Mitarbeiter" wird mit einer Schleife die intelligente Tabelle anhand der ausgewählten Bedingungen nach Übereinstimmungen durchlaufen. Für jeden Mitarbeiter wird dabei ein neues Tabellenblatt erstellt, in dem die Leistungen der einzelnen Mitarbeiter erfasst werden. Aktuell durchläuft die Schleife ca. 5000 Zeilen.
Meine Idee war, dass durch die Auswahl (bspw. jahr: 2021, Monat: Januar) der Code nicht mehr den kompletten Datensatz durchläuft, sondern nur noch die Zeilen der intelligenten Tabelle, die die oben ausgewählten Bedingungen erfüllen um so die Geschindigkeit der Auswertung zu erhöhen. Bisher habe ich es nicht geschafft, dies in den Code zu übertragen. Vielleicht hat jemand von euch eine Idee, ob und wenn ja wie ich das im Code ausdrücken kann? Über Hilfe wäre ich sehr dankbar und bin grundsätzlich auch bereit einen Lösungsansatz für das Geschwindigkeitsproblem (bspw. über ein Array) zu vergüten. Im Anhang findet ihr die Excel Datei.
Vielen Dank im Voraus und beste Grüße aus Köln
https://www.herber.de/bbs/user/164127.xlsm


19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Durchlaufgeschwindigkeit erhöhen
08.11.2023 19:27:43
Oberschlumpf
Hallo #DEINNAME (von Excel geklaut :-) ),

Ohjehh! Ohjehh! Ohjehh! :-)

Hab deine Datei runtergeladen, geöffnet, gestartet, 2021 + Januar ausgewählt unnnd auf den Button geklickt :-)
Bis fertig war, hat es so ungefähr 20 Sekunden gedauert :-)

Hmm, dachte ich mir, der Fragende schreibt was von Dauer = ca 15 Minuten oder so.
Na gut, dachte ich weiter, der Fragende lässt ja auch ca 5000 Durchgänge (=Datenzeilen???) abarbeiten - in der Bsp-Datei gibt es aber nur 1558 Datenzeilen (=Durchgänge???).

Okayyyy! Ich hab die vorhandenen Datenzeilen (1558) kopiert und so oft im Blatt "Leistungsmeldung" immer wieder am Ende eingefügt, bis hier bei mir 12464 Zeilen belegt waren! :-)

Gespeichert - und noch mal alles gestartet, 2021 + jetzt mal Februar ausgewählt und auf den Button geklickt :-)
Jeeetzt hat alles - ca 4 MINUTEN - gedauert :-)

Ja, ich weiß, noch immer nicht 15 Minuten, obwohl Anzahl Zeilen fast 3x so viel wie bei dir = Grund: ich hab n ziemlich schnellen Computer, aber egal...das nur zur Erklärung.

Trotzdem wollt ich natürlich wie du wissen, WIESO dauert das so lange????

Rausgefunden hab ich das hier:

1. Code löscht zuerst alle Blätter, die nicht zu den "Stammblättern" gehören
2. Code sortiert in Blatt "Leistungsmeldung" zuerst nach Spalte Datum, dann nach Spalte Projekt-Name
3. Code liest Jahr + Monat aus Userform aus = 2021 + Februar
4. jetzt kommts!

a) Code erstellt neues Blatt für "Mitarbeiter1"
b) Code beginnt in Blatt "Leistungsmeldung" in Zeile 2, überprüft Jahr + Monat
c) wenn geprüfte Zellen (Jahr, Monat) NICHT mit in Userform ausgewähltem Jahr, Monat übereinstimmt, dann...
...wird Blatt für "Mitarbeiter1" wieder gelöscht!^^
...die nächste Zeile in Blatt "Leistungsmeldung" wird geprüft, und alles beginnt bei a)

In meiner Datei mit ca 12000 Zeilen wird also...
...Blatt "Mitarbeiter1" 1825 mal erstellt UND wieder gelöscht❗bis der Code endlich mal Mitarbeiter1 UND 2021 UND Februar das erste mal nebeneinander in der selben Zeile findet!!!!! :-)))))
...jetzt endlich werden auch mal die Leistungsdaten für Mitarbeiter1 im Blatt "Mitarbeiter1" eingetragen...YEAH! :-)
(wunder dich nich, wieso das Suchen 1825x dauert - in meiner Datei sind deine gezeigten Daten ja "nur kopiert und viele Male wieder eingefügt" - jeder Mitarbeiter wiederholt sich also viele male)

Nun denn - ich werde mein Glück an deiner Datei mal versuchen :-)
Ob ich was Schnelleres vom Ablauf finde, kann ich nicht versprechen, und ich weiß auch nicht, wie lange ich brauchen werde.

Aber all das ist ja nicht so schlimm, denn...

Du bist ja im geilsten Forum gelandet, das ich kenne!

hier gibt es so viel kompetentes Schwarmwissen - vielleicht ist ja ein anderer Helfer auch schon am Werk....und viel schneller fertig als ich....wir werden es sehn ;-)

Ciao
Thorsten

Anzeige
AW: Durchlaufgeschwindigkeit erhöhen
09.11.2023 00:46:12
Piet
Hallo Thorsten

ich habe mir die Datei noch nicht angeschaut, aber amüsant was du schon herausgefunden hast!
Wo befindet sich der Code der 1.825 mal ein Blatt erstellt und wieder löscht. Da sollte man ansetzen!
Heute ist es aber zu spät, mal sehen ob ich morgen etwas Zeit habe.

mfg Piet
AW: Durchlaufgeschwindigkeit erhöhen
09.11.2023 06:43:14
Oberschlumpf
Hi,

na, kein Interesse mehr, oder unsere Antworten noch gar nicht gesehn?
Nun denn, ich habe fertig :-)

wenn du magst, hier:
https://c.gmx.net/@334256655850015599/ukFaawQAR6W8VafJd0YRow
...ist aber von meiner GMX-Cloud, weil Datei enthält jetzt ü 12000 Datenzeilen, ist deswegen 2,3 MB groß - und ich hatte keine Lust, alles wieder so zu verkleinerm, damits auch der Herber-Server durchlässt.

Mein 1. Versuch, ohne meinen Code, brauchte für die große Datei 00:03:28
Mein letzter Versuch mit meinem Code brauchte 00:00:07 :-)

Is'n Unterschied, oder? :-))

hab ich denn alles berücksichtigt, und kann ich dir helfen?

Ciao
Thorsten
Anzeige
AW: Durchlaufgeschwindigkeit erhöhen
09.11.2023 10:56:24
KölscheJung
Größten dank alle die bisher geschrieben haben. Ich bin überwältigt von eurer Hilfsbereitschaft. Ich schaffe es leider erst im Laufe des Tages zu antworten.
AW: Glückwunsch zu eurem tollen Erfolg aus Izmir
10.11.2023 12:04:27
Piet
Hallo an alle

freut mich als gebürtiger Kölner das eure gemeinsame Arbeit so ein tolles Ergebnis gebracht hat.
Von 15 Minuten in den Sekundenbereich, das ist eine richtig tolle Arbeit. Hochachtung für euch beide!
Freut mich für den Kölschen Jung! Herzliche Grüsse an meine Heimatstadt aus Izmir/TR.

mfg Piet
AW: Glückwunsch zu eurem tollen Erfolg aus Izmir
10.11.2023 14:35:19
Oberschlumpf
Moin,

und ich bedank mich mal bei dir wegen deines Lobes :-)

Ciao + viele Grüße aus dem Norden runter in den Süden :-)
Thorsten
Anzeige
AW: Durchlaufgeschwindigkeit erhöhen
09.11.2023 11:11:51
Oberschlumpf
na, wir, ich auf jeden Fall!, freuen uns schon auf deine Antwort(en)..ich bin neugierig :-)
schon das 1. Update^^ :-)
09.11.2023 07:07:38
Oberschlumpf
Hi,

hier, noch mal
https://c.gmx.net/@334256655850015599/pbAWOGsMQrKG70D-wnWK5g

Hab leider erst eben festgestellt:
- wenn Klick auf Button im Userform, ohne vorher Auswahl für Monat/Jahr, kommt es zum Fehler
- bei Auswahl Dezember/2021 kommt es zum Fehler

deswegen oben der Link zum Update

Wer findet noch weitere Fehler?^^ :-)

Ciao
Thorsten
AW: schon das 1. Update^^ :-)
10.11.2023 10:14:21
koelschejung
Hallo Thorsten, ich bin DIr unendlich dankbar. Dein Code läuft perfekt und benötigt anstatt 15 min mit dem selben Datensatz 3 Sekunden. ;)
Wie ich bereits bei Ralf geschrieben habe, bin ich absoluter Laie was VBA angeht. Ich werde am Wochenende versuchen deinen Code nachzuvollziehen und wenn das in Ordnung ist, dir bei weiteren Rückfragen nochmals schreiben. Nochmals vielen, vielen Dank bis zu dieser Stelle.
Beste Grüße aus Köln

Anzeige
AW: schon das 1. Update^^ :-)
10.11.2023 11:11:54
Oberschlumpf
Hi Name?

ja, cool! Da wirst du ja in Zukunft dank Ralfs + meiner Hilfe sooo viel Wartezeit einsparen! :-))

Und noch mal ja, natürlich kannst du Fragen stellen, wenns noch welche gibt.

Aber ich suchte nach ner "Ausrede^^", dass ich nicht jetzt schon einkaufen muss :-)
Danke, du hast sie mir geliefert.

hier, guck mal...
https://c.gmx.net/@334256655850015599/muoZF43HSW-yElfgbaRBbw

Noch mal meine Datei - diesmal aber mit vielen Kommentaren im Code, die dir hofftl viel erklären, was wann im Code passiert.
Hilfts?

Ciao
Thorsten
Anzeige
AW: schon das 1. Update^^ :-)
11.11.2023 13:39:36
koelschejung
Hi Thorsten,

das ist mir ja schon wieder unangenehm, dass ich (bzw. mein Mangelnden VBA Kenntnisse ;)) dazu geführt haben, dass sich jemand anderes darüber ärgert, dass du nicht rechtzeitig einkaufen bist. ;)
Ich schaue mir den Code mit der Kommentierung jetzt an. Im Anschluss werde ich deinen Code nutzen um die in der UserBox zu sehenden zwei anderen Auswertungsoptionen selber hinzubekommen.
Danke nochmal für deine und Ralfs Mühe. Ich bin weiterhin überwältigt von so viel Hilfsbereitschaft und kann das schwer annehmen, dass ich dafür nicht zumindest eine kleine Spende für die Spardose eurer Kids oder sonstwas springen lasse (ich hoffe ich verstoße jetzt nicht gegen Forumsregeln!).
Über eine ganz kurze Email von euch beiden an roman.lammers@gmx.de würde ich mich freuen.
Beste Grüße "mein Name" (Roman)
Anzeige
spende doch ein bissel was gemeinnützig. owt
11.11.2023 15:14:50
ralf_b
ich will KOHLE KOHLE KOHLE!!!...nicht :-))
11.11.2023 18:08:44
Oberschlumpf
Hi Roman ;-)

Ja, freu mich immer noch, dass ich helfen konnte.

Und danke für den Versuch, Inhalte von Spardosen zu vermehren :-)

Aber ich bin durchaus ein Freund alter Gewohnheiten...will sagen...hier auf herber.de bin ich seit ca 2003 mit dabei....die ersten Jahre natürlich auch als (viel)Fragender :-)...aber irgdwann war dann auch ich..."aufgestiegen"...hihi...zu einem Antworter...yeah! :-)

Und mit meiner 1. Antwort bis heute hab ich immer alles aus Spaß an der Freude getan...und genau so will ich es auch weiter tun ;-)

So bin auch ich Ralf's Meinung und schlage dir vor, Geld für viele zu spenden....zu Bsp an die Tafeln...

Ciao + weiter viel Spaß im besten Forum der Computer-Welt :-)))
Thorsten
Anzeige
AW: Durchlaufgeschwindigkeit erhöhen
09.11.2023 06:36:06
Oberschlumpf
Moin Ralf,

nach Klick auf den Button "Auswertung" im Blatt "Leistungsmeldung,Auswertung" steigt dein Code schon im UserForm_Initialize-Ereignis aus: Fehler 1004, irgdwas mit Unique-Funktion passt nicht (hab das aber nicht weiter überprüft)

Ciao
Thorsten
AW: Durchlaufgeschwindigkeit erhöhen
10.11.2023 09:35:48
koelschejung
Vielen, vielen dank für deine Mühe. Ich bin immer noch völlig sprachlos. Der Code läuft einwandfrei. Statt 15 min dauert es unter 10 Sekunden. Wahnsinn
Zwei Kleinigkeiten sind mir aufgefalllen. Es erfolgt keine Berechnung der Summe auf den einzelnen Tabellenblättern, wahrscheinlich durch die Formatierung als Text bedingt. Zudem werden Tabellenblätter der Mitarbeiter bei denen keine Leistung erfasst sind, nicht gelöscht.
Ich werde mir sowohl deinen als auch Oberschlumpf's Code am Wochenende in Ruhe anschauen und versuchen alles nachzuvollziehen. Wie man an meinem Ursprungscode erkennen kann, bin ich absolut kein VBA-Kenner und hab mir als Neuling vor drei Jahren die verschiedenen Bestandteile zusammengebastelt ums irgendwie ans laufen zu bringen. Mein Chef wollte unbedingt eine EXcel Lösung und keiner hat sich bereit erklärt sich da dran zu setzen. Das zu meinem Hintergrund. ;)
Wenn ich mir den Code am Wochenende anschaue, werde ich sicherlich nicht alles auf Anhieb verstehen. Wenn ich an dieser Stelle dann nochmals nachfragen könnte, wäre ich umso dankbarer.
Beste Grüße aus Köln und nochmals vielen vielen Dank
Anzeige
AW: Durchlaufgeschwindigkeit erhöhen
09.11.2023 06:43:01
ralf_b
Moin Thorsten,

bei mir läufts durch. Im Initialize werden die Dropdowns mit Eindeutig() vorbelegt. Wollte ich mal testen statt dem Dictionary, da der TE 365 Business angegeben hat.

AW: Durchlaufgeschwindigkeit erhöhen
09.11.2023 06:44:55
Oberschlumpf
Hi Ralf,

ok, vielleicht liegts daran, dass ich MSO 2016 nutze, nicht 365 - weiß ich aber nicht, ob das der Grund ist. Eine andere Idee hab ich nicht.

Ciao
Thorsten
ja das ist der Grund owt
09.11.2023 06:49:50
ralf_b

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige