Durchlaufgeschwindigkeit erhöhen
08.11.2023 17:29:11
KölscheJung
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