Microsoft Excel

Herbers Excel/VBA-Archiv

Rechnen - Excel oder VBA? | Herbers Excel-Forum


Betrifft: Rechnen - Excel oder VBA? von: Stefan
Geschrieben am: 08.08.2012 13:45:19

Hallo,

ich habe eine Excel Datei in welcher die Umsätze von ca 6000 Materialien aus zwei verschiedenen Systemen abgeglichen werden müssen.
Die einzelnen Materialien müssen auf 16 verschiedene Kriterien hin abgeglichen werden (Umsätze in Lokaler Währung, Umsätze in EUR, Umsätze vergangenes Jahr, Budget etc...)

Ich habe hierfür eine Tabelle1 erstellt in welcher ich für jede Spalte eine Formel definiert habe, wo ich mittels Sverweis mir die Werte aus System 1 und System 2 ziehe und die Differenz berechne. Es werden dann die Materialien aus System1 in die Tabelle1 kopiert und Excel beginnt für jede Zeile nun 16 Berechnungen
D.H. wir kommen hier bei ca 6000 Materialien und 16 Berechnungen / Material auf ca 100.000 Berechnungen die von Excel durchgeführt werden müssen
Diese dauern zumindest auf meinem Rechner gut 10 min und ich sehe in der Statusleiste von EXCEL immer "Berechnung wird ausgeführt: (4 Prozessor(en)): X%"

Meine Frage:
Gibt es eine Möglichkeit die Berechnungen schneller durchführen zu lassen? Kann man mit VBA schneller rechnen als mit Excel selber?
Habe ich Alternativen? Access? Da wäre dann die Frage wie ich die Daten aus Excel ins Access bekomme, denn die Daten werden über ein Excel addin vom softwarehersteller direkt aus den Systemen gezogen

Vielen Dank für eure hilfe
Beste Grüße
Stefan

  

Betrifft: AW: Rechnen - Excel oder VBA? von: Rudi Maintaire
Geschrieben am: 08.08.2012 14:56:55

Hallo,
Kann man mit VBA schneller rechnen als mit Excel selber?
Normalerweise sind Formeln schneller als VBA.

Die Formeln/ Beispielmappe wären interessant. Da gibt es oft Optimierungspotenzial.

Gruß
Rudi


  

Betrifft: AW: Rechnen - Excel oder VBA? von: Stefan
Geschrieben am: 08.08.2012 16:37:40

Hallo Rudi,

ich hab mal eine Datei als Beispiel hochgeladen.
https://www.herber.de/bbs/user/81332.xlsm

Damit das ganze "ins Rollen" kommt, musst du den Button auf dem ersten Tabellenblatt einmal betätigen

In der Beispieldatei geht das ganze ziemlich fix, das liegt aber daran das ich hier nur 1000 Zeilen habe (musste ich machen wegen der 300KB Begrenzung)
die Original Datei hat wie gesagt über 6000 Zeilen und da dauert es bis zu 10 min teilweise

Beste Grüße
Stefan


  

Betrifft: AW: Rechnen - Excel oder VBA? von: Stefan
Geschrieben am: 08.08.2012 16:51:07

für den Fall, dass dir das mit dem Makro zu unsicher ist hier mal beispielhaft die formel die ich verwende


=WENN(ODER(UND(ISTLEER(SVERWEIS([@[Verification Key]];'SAP Sales'!$A$3:$U$1048576;13;FALSCH)); ISTFEHLER(SVERWEIS([@[Verification Key]];'CONS - Sales'!$A$5:$S$1048576;1;FALSCH))); UND(SVERWEIS([@[Verification Key]];'SAP Sales'!$A$3:$U$1048576;13;FALSCH)=0; ISTFEHLER(SVERWEIS([@[Verification Key]];'CONS - Sales'!$A$5:$S$1048576;1;FALSCH))));0; SVERWEIS([@[Verification Key]];'SAP Sales'!$A$3:$U$1048576;13;FALSCH)-SVERWEIS([@[Verification Key]]; 'CONS - Sales'!$A$5:$S$1048576;7;FALSCH))


kurz zu den erklärungen: ich muss zwei dinge abfangen, damit der sverweis nicht auf einen fehler läuft. Das ist leider dadurch begründet das wir mit zwei systemen arbeiten die jeweils ein etwas anderes handling haben

ich muss prüfen ob im Tabellenblatt "SAP Sales" die ermittelte Zelle leer ist und der Sverweis im Tabellenblatt CONS - Sales auf einen Fehler läuft oder ob die ermittelte Zelle in SAP Sales "0" ist und der SVERWEIS im Tabellenblatt CONS - Sales auf einen Fehler läuft.
Wenn eine dieser beiden Bedingungen zutrifft, dann soll er in die zelle eine "0" Schreiben und sonst soll er die Differenz der beiden ermittelten Zahlen berechnen

ich weiß aktuell nicht, wie ich die Formel verschlanken könnte. Die oder(und())Abfragen kann ich leider nicht entfernen und der sverweis ist relativ simpel gehalten

Beste Grüße


  

Betrifft: AW: Rechnen - Excel oder VBA? von: Rudi Maintaire
Geschrieben am: 09.08.2012 10:17:55

Hallo,
IstFehler(SVerweis()) solltest du nur 1x prüfen.
Außerdem musst du Istleer(sverweis()) nicht prüfen, da auch der Sverweis() auf eine leere Zelle 0 ergibt.
Die Prüfung auf 0 reicht also.
Und lass den SVERWEIS() über ganze Spalten laufen. Ist nicht schädlich und erhöht die Übersichtlichkeit.
Ändere deine Formeln entsprechend.

=WENN(ODER(SVERWEIS([@[Verification Key]];'SAP Sales'!$A:$U;13;FALSCH)=0; ISTFEHLER(SVERWEIS([@[Verification Key]];'CONS - Sales'!$A:$S;1;FALSCH)));0; SVERWEIS([@[Verification Key]];'SAP Sales'!$A:$U;13;FALSCH)-SVERWEIS([@[Verification Key]]; 'CONS - Sales'!$A:$S;7;FALSCH))
Sollte schon was bringen.

Außerdem könntest du Istfehler(SVerweis)) in eine Hilfsspalte (Z) einbauen, dann prüfst du das nur 1x und nicht wie jetzt 28x in jeder Zeile.

Z6: =ISTFEHLER(SVERWEIS(A6;'CONS - Sales'!A:A;1;))
D6 =WENN(ODER(Z6;SVERWEIS(A6;'SAP Sales'!$A:$U;13;FALSCH)=0);0;SVERWEIS(A6;'SAP Sales'!$A:$U;13;FALSCH)-SVERWEIS(A6;'CONS - Sales'!$A:$S;7;FALSCH))

Den Rest entsprechend.

Gruß
Rudi


  

Betrifft: AW: Rechnen - Excel oder VBA? von: fcs
Geschrieben am: 08.08.2012 16:21:38

Hallo Stefan,

das Problem dürfte sein, dass du in die einzelnen Formeln sich wiederholende SVERWEIS-Formeln eingebaut hast, so dass Excel meherfach die gleichen Werte berechnen muss.

Es dürfte besser funktionieren, wenn du für System1 alle benötigten Daten in ein Blatt kopierst und nicht nur die Materialien. Daneben legst du dann Formeln um zu den Materialien per SVERWEIS die Daten aus System2 zu holen. Daneben dann oder auf einem separaten Tabellenblatt die 16 Spalten mit den Berechnungen. Dadurch sollte die Formelstruktur einfacher werden und in der Berechnung schneller funktionieren.

Wie von Rudi bereits angemerkt sind die Excel-Tabellenfunktionen im allgemeinen schneller als entsprechende VBA-Funktionen.

Gruß
Franz


  

Betrifft: Ich weiß ja nicht, ob das wirklich so ist mit ... von: Luc:-?
Geschrieben am: 09.08.2012 04:18:35

…den Wiederholungen, Franz,
in der xlHilfe steht, dass Fmln intern optimiert wdn (d.m. wohl umgestellt wdn können). Das könnte auch das betreffen. Die ersatzweise Verwendung von benannten FmlTeilen (b.Wdholung) dürfte dann eher der Kürzung der FmlLänge als der Rechengeschwindigkeit zugute kommen.*
* Übrigens kann man für so etwas anstelle von Namen auch eine „Erinnerungs“-udFkt verwenden!
Gruß Luc :-?


Beiträge aus den Excel-Beispielen zum Thema "Rechnen - Excel oder VBA?"