Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
892to896
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
892to896
892to896
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Performanceoptimierung bei Sverweis

Performanceoptimierung bei Sverweis
02.08.2007 10:32:34
Bernd
Hallo zusammen,
ich habe einige Exceldateien, die sich sich täglich automatisch um eine neue Datenzeile "verlängern". In dieser Zeile werden dann über Sverweis Daten aus einer Quelldatei angezogen, sofern die Bedingung (Workday, Arbeitstag z.B.) erfüllt ist. Die entsprechende Sverweisformel habe ich über mehrere hundert Zeilen vorsorglich nach unten kopiert. Vorteil ist nun, dass ich die Formeln für längere Zeit nicht anpassen muss, großer Nachteil ist aber, dass die Performance durch die Masse der Sverweis-Formeln gewaltig in den Keller geht.
Hier habe ich eine kleine Musterdatei beigefügt, aus der hoffentlich ersichtlich wird, was ich meine:

Die Datei https://www.herber.de/bbs/user/44702.xls wurde aus Datenschutzgründen gelöscht


Kann man dies eleganter lösen, so dass ich a.) keine täglichen Anpassungsaufwand und b.) die Performance wesentlich besser wird? Eine Verbesserung wäre auch schon, dass ich z.B. nur 20 Zeilen mit Formeln "vorkopiere", aber dann durch Excel (evtl. bedingte Formatierung) oder VBA auf die notwendige Anpassung, d.h. erneutes "Vorkopieren der Formeln" hingewiesen werde.
Viele Grüße
Bernd

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Performanceoptimierung bei Sverweis
02.08.2007 11:00:44
Harry
Hallo Bernd,
ich kann zwar deine Tabelle noch nicht richtig interpretieren, aber vielleicht mal ein Denkansatz zum Ausbauen.
Annahme: Deine Tabelle wächst täglich um einen Datensatz und die bereits bestehenden Datensätze ändern sich aber nicht mehr (sind per SVERWEIS mit der Ursprungstabelle verknüpft, aber diese Ursprungsdaten ändern sich nicht). Dein Performanceprobem ist nur die Menge der SVERWEISe durch einmaliges Herunterziehen um mehrere hundert Zeilen (="Vorratszeilen").
Durch ein Verkleinern der Menge der Vorratszeilen kannst du m.E. dein Problem heute lösen, aber in x-hundert Tagen hast du doch das gleiche Problem.
Prinzipiell könnte man beim Öffnen der Datei prüfen, ob die "Vorratszeilen" verbraucht sind und einen optischen Hinweis machen, dass "verbraucht" oder auch gleich automatisiert eine Zeile einfügen. Das Performanceproblem kommt dann auch, nur etwas besser.
Wenn die Altdaten (bis gestern) sich nicht mehr ändern, sollte man m.E. einfach per VBA eine Ereignis(Aktualisierungs)routine (bei Öffnung der Tabelle) erstellen, bei der die Ursprungsdaten fest (heißt einmal und ohne SVERWEIS) übernommen werden. Damit kommst du auch nach mehreren hundert Tagen nicht auf die Anzahl SVERWEISe.
Dazu müsstest du aber schreiben, welche Daten aus welchen Dateien in welche Zeilen und Spalten übernommen werden sollten.
Gruß
Harry

Anzeige
AW: Performanceoptimierung bei Sverweis
02.08.2007 11:21:00
Bernd
Hallo Harry,
die "alten" Zeilen mit den Formeln ersetze ich regelmässig durch Werte, so dass das Problem eher aus den zukünftigen, "Vorratszeilen" resultiert. Verknüpft sind eigentlich nur die Zellen in Spalte D in Abhängigkeit davon, ob zum entsprechenden Stichtag (workday(HEUTE();-1) auch Daten aus der Quelldatei vorliegen (z.B. tagesgültige Warenpreise).
Gruß
Bernd

AW: Performanceoptimierung bei Sverweis
02.08.2007 12:18:00
Harry
Hallo Bernd,
mal als Muster https://www.herber.de/bbs/user/44708.xls
Ich habe die Routine bei Tabelle2(Basis).Activate eingetragen, d.h. sobald nach dem Öffnen der Datei das Tabellenblatt Basis aktiviert / angezeigt wird, wird geprüft und notfalls werden Zeilen bis zum Tag Heute -1 ergänzt.

Private Sub Worksheet_Activate()
Dim lngR As Long
lngR = Range("A65536").End(xlUp).Row
While (Date - 1 > Cells(lngR, 1))
Range("A" & lngR & ":D" & lngR).Select
Selection.AutoFill Destination:=Range("A" & lngR & ":D" & lngR + 1), Type:=xlFillDefault
lngR = Range("A65536").End(xlUp).Row
Wend
End Sub


siehe Extras/Makro/VisualBasicEditor -> Doppelklick auf Tabelle2(Basis) unter VBAProject(44708.xls)/MicrosoftExcelObjekte.
Alternativ wäre auch ein Eintrag der Routine beim Öffnen der Datei möglich.
Gruß
Harry

Anzeige
AW: Performanceoptimierung bei Sverweis
02.08.2007 13:42:11
Bernd
Hallo Harry,
ich bekomme leider die Fehlermeldung, dass der Code im Haltemodus nicht ausgeführt werden kann:
While (Date - 1 > Cells(lngR, 1))
ist markiert.
An was könnte das liegen?
Gruß
Bernd

AW: Performanceoptimierung bei Sverweis
02.08.2007 13:52:00
Harry
im VB-Editor einfach F5 drücken (oder Ausführen/Fortsetzen) und danach Strg-Umschalt-F9 (oder Debuggen/AlleHaltepunktelöschen) - wahr wohl noch ein Haltepunkt drin.
Oder anbei die Datei nochmal ohne Haltepunkte https://www.herber.de/bbs/user/44717.xls
Gruß
Harry

AW: Performanceoptimierung bei Sverweis
02.08.2007 14:30:08
Bernd
Hallo Harry,
ich bekomme immer noch Fehlermeldung, konkret:
Laufzeitfehler 13; Typen unverträglich
Kommt das evtl. aus den Zellen in der A-Spalte? Keine Ahnung, wo diese Links herkommen?
=WENN(A2="";""; WENN('C:\Program Files\Microsoft Office\Office10\MAKRO\Analyse\ATPVBAEN.XLA'!workday(HEUTE();-1)> ='C:\Program Files\Microsoft Office\Office10\MAKRO\Analyse\ATPVBAEN.XLA'!workday(A2;1); 'C:\Program Files\Microsoft Office\Office10\MAKRO\Analyse\ATPVBAEN.XLA'!workday(A2;1);""))
Gruß
Bernd

Anzeige
AW: Performanceoptimierung bei Sverweis
02.08.2007 14:58:26
Harry
kürze diese auf

=WENN(A2="";""; WENN(workday(HEUTE();-1)> =workday(A2;1); workday(A2;1);""))


hatte beim Speichern das Analysefunktionen-Addin nicht angeschaltet

AW: Performanceoptimierung bei Sverweis
02.08.2007 23:17:01
Bernd
Hallo Harry,
das sieht nun schon ganz gut aus: Die Formel wird quasi nur immer eine Zeile vorkopiert, wenn ich das richtig verstanden und in der Datei nun geprüft habe. Wenn jetzt noch die "Vergangenheitsdaten" durch Werte ersetzt würden, wäre das dann schon fast perfekt.
Ich muss mir das morgen nochmals an der "Echtdatei" anschauen, im Prinzip kann man die Lösung ja flexibel anpassen, wenn ich z.B. mehr Spalten habe, oder?
Zunächst mal vielen Dank, ich melde mich nochmals!
Gute Nacht
Bernd

Anzeige
Noch ein kleines Anliegen ...
03.08.2007 14:00:00
Bernd
Hallo Harry,
konnte den Code nun erfolgreich in meine "Echtdatei" einbauen, auch mit der Spaltenanpassung gab es keine Probleme.
Jetzt bleibt aus meiner Sicht nur noch folgendes offen:
1.)
Ich muss daran denken, dass ich manuell immer das Tabellenblatt Basis anklicke, damit die Routine läuft. Da ich in der Echtdatei mehrere dieser Tabellenblätter habe, ist das ein wenig umständlich und fehleranfällig. Kann man das noch automatisieren?
2.) Kann man die Formeln für die Vortage, die nicht mehr relevant sind, automatisiert durch Werte ersetzen?
Viele Grüße und schon mal schönes Wochenende!
Bernd

Anzeige
AW: Noch ein kleines Anliegen ...
03.08.2007 15:03:37
Harry
Hallo
zu 1. klar, müsstest hier nur angeben, bei welchem Ereignis das erfolgen soll (automatisiert/manuell/zeitgesteuert/ereignisgesteuert)
Bsp. Öffnen oder Schließen der Datei, Aktiverung (irgend)eines Tabellenblattes, bei Eingabe von Werten, per Button (damit manuell) etc. - dann die Routine mit diesem Ereignis verbinden
zu 2. auch klar - 2 Alternativen
a) nachträgliches Ändern der Formeln in die "endgültigen" Werte (so wie du vorgeschlagen hast)
b) man könnte aber auch gleich die korrekten Werte aus den Ursprungsdateien auslesen und nie die Formeln nach unten kopieren
Wäre aber gut, wenn du dazu deine aktuelle Mustertabelle und deine Ursprungsdatentabelle hochladen würdest
Gruß
Harry

Anzeige
AW: Noch ein kleines Anliegen ...
06.08.2007 00:45:39
Bernd
Hallo Harry,
nun habe ich wohl die Qual der Wahl...
zu 1.) beim Öffnen der Datei wäre ideal!
zu 2.) Alternative a) wäre mit lieber
Wegen der Datei: Die Datei, dich im "Echtbetrieb einsetze", kann ich leider nicht hochladen, da zu groß und mit DDE-Links. Kannst Du nicht die letzte bearbeitete Datei nehmen. Ich denke, ich werde es schon hinbekommen, das anzupassen.
Gruß
Bernd

AW: Noch ein kleines Anliegen ...
06.08.2007 10:52:00
Harry
Hallo Bernd
habe mal neue Version hochgeladen https://www.herber.de/bbs/user/44783.xls
bei Workbook_open wird die sub "Aktualisierung" aus dem Modul 1 ausgeführt , dort können noch diverse Anpassungen (Stellen sind kommentiert) erfolgen, insb. Ausblendung der Messageboxen, die nur für Testläufe relevant sind
Gruß
Harry

Anzeige
AW: Noch ein kleines Anliegen ...
06.08.2007 14:56:00
Bernd
Hallo Harry,
leider gibt es Probleme mit dem Code:
1.) Ich muss das Code über den den VBA-Editor starten, ansonsten passiert leider gar nichts.
2.) Der Ersetzen-Vorgang dauert ziemlich lange, d.h. die Message-Boxen kommen sofort, aber dann haengt der Rechner ziemlich lange, obwohl es nur ca. 20 Formelzeilen gibt.
3.) Wie muesste ich den Code noch anpassen, dass mehrere Tabellenblätter auf die Weise verarbeitet werden?
Gruß
Bernd

AW: Noch ein kleines Anliegen ...
06.08.2007 15:22:03
Harry
Hallo Bernd,
sind die Probleme in deiner Mappe oder meiner (bzw. funktioniert meine Mappe bei dir korrekt)?
Wenn letzeres mit ja, dann
zu 1. Du musst im Editor für die Arbeitsmappe folgende Prozedur ausfüllen (genaue Stelle kannst du ja mit meiner Mappe überprüfen

Private Sub Workbook_Open()
Aktualisierung
End Sub


zu 2. Wenn in meiner Mappe "schnelle" Ausführung und in deiner langsam, kann es dann sein, dass deine Formeln (=Wertübernahmen) sehr langsam sind? Heißt teste deine Datei mit Datum von gestern (=Umwandlung aller alten Formeln) und danach Systemdatum wieder auf heute (=es wird nur eine weitere Formelzeile erstellt und dann auch nur eine umgewandelt) Letzteres müsste deutlich schneller ausgeführt werden.
zu 3. 2 Möglichkeiten
a) einfach innerhalb der Prozedur den Coe von Zeile "Sheets("Basis").Activate " bis zum letzten "End If" mehrfach (=für jedes benötigte Tabellenblatt) kopieren und für jede Einfügung die Tabellenblattnamen anpassen (Bsp. "Sheets("Basis2").Activate")
Vorteil: individuelle Anpassungen für jedes Tabellenblatt möglich wie z.B. Beginn der Liste oder Anzahl der Spalten
b) bei jeweils vollständig identischen Tabellenblättern kannst du den Blattnamen als Parameter übergeben. Dazu folgende Anpassungen des Originals
Name der Prozedur - Sub Aktualisierung(strMappe As String)
9. Zeile in Prozedur - Sheets(strMappe).Activate
Aufruf der Prozedur gemäß zu 1. -


Private Sub Workbook_Open()
Aktualisierung("Basis")
Aktualisierung("Basis2")
End Sub


Gruß
Harry

Anzeige
AW: Noch ein kleines Anliegen ...
08.08.2007 20:48:02
Bernd
Hallo Harry,
nun ist es perfekt, zumindest wenn es nicht so viele Formelzeilen umzuwandeln gibt. Ich arbeitete mit Verweisformeln und die sind leider wohl nicht so perfomant!
Vielen Dank,e nochmals und bis demnächst mal!
Bernd

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige