Microsoft Excel

Herbers Excel/VBA-Archiv

Formeln nach vba konvertieren | Herbers Excel-Forum


Betrifft: Formeln nach vba konvertieren von: Rene Richter
Geschrieben am: 27.01.2010 07:08:43

Gibt es eine 'fertige' Routine, die mir Formeln in vba-Code umwandelt?

Hintergrund: Ich bekomme eine Reihe an Tabellen, die einen ähnlichen Aufbau haben und viele Formeln enthalten. Da ich per VBA Summen bilde um diese dann weiterzuverarbeiten, scheitere ich immer an den Zellen mit den Formeln. Prozentwerte kann man nun mal nicht kummulieren. Nun würde ich gerne diese Zellen im Nachgang in vba berechnen. Dazu müsste ich die Formeln in vba-Code konvertieren. Gibt es dafür eine Routine?

  

Betrifft: AW: Formeln nach vba konvertieren von: fcs
Geschrieben am: 27.01.2010 08:43:31

Hallo Rene,

viele Tabellenfunktionen kann man in VBA direkt aufrufen. Allerdings nur unter ihrem englischen Namen.

Beispiel:
Cells(Zeile,Spalte) = Application.Worksheetfunction.SumIf(KriterienBereich,Kriterium, _
Wertebereich)
Meistens ist es effektiver per VBA die Formeln in die Zellen zuschreiben und anschließend falls gewünscht in den Zellen die Formeln durch Werte zu ersetzen. Erst wenn die Berechnungen zu komplex werden sollte man auf VBA-Prozeduren ausweichen.
Die VBA-Syntax der Formeln kann man mit dem Makro-Recorder aufzeichnen, dabei die Aufzeichnungsart vor dem Aufzeichnen auf "Relativ" stellen. Beim Aufzeichnen dann die Formeln in die 1. Berechnungszeile eintragen und dann per "nach unten ausfüllen" oder "Kopieren" in die die restlichen Zeilen übertragen.

Damit hast du das Grundgerüst und muss jetzt ggf. "nur" noch dafür sorgen, dass in der Prozedur die letzte Zeile, bis in die die Formeln kopiert werden sollen, ermittelt wird und die aufgezeichneten festen Zellbereiche in variable Bereiche umgesetzt werden.
Außerdem sollte man noch die aufgezeichneten Scrollbefehle löschen und die meisten Select, Selection und Activate bereinigen, um die Code-Ausführung zu beschleunigen.

Gruß
Franz


  

Betrifft: vielen Dank für den Tipp von: Rene
Geschrieben am: 27.01.2010 09:34:04

Hilft mir zwar nicht wirklich weiter, aber dennoch vielen Dank für den Tipp.


  

Betrifft: AW: Formeln nach vba konvertieren von: Tino
Geschrieben am: 27.01.2010 08:43:45

Hallo,
viele Funktionen sind im VBA schon integriert.
Mach mal Application.WorksheetFunction. nach dem letzten Punkt bekommst du sie schon vorgeschlagen.
Für größere Formeln oder sogar Matrixformeln wirst Du wahrscheinlich nicht drum rum kommen
diese in einer benutzerdefinierten Function nachzubauen.
Ansonsten kannst Du noch mit Evaluate arbeiten um Ergebnisse zu berechnen,
diese benötigen aber auch die Englische Syntax der Formel (geht aber auch nur sicher bei einfachen Formeln).

Beispiel mit Evaluate:
Wert = Evaluate("=COUNTIF(B2:B4,5)")
oder
Wert = [=COUNTIF(B2:B4,5)]

Gruß Tino


  

Betrifft: vielen Dank für den Tipp. von: Rene
Geschrieben am: 27.01.2010 09:38:11

auch dieser Beitrag hilft mir nicht wirklich weiter. Ich muss (will) komplett in vba rechnen - und nicht die Werte ins Tabellenblatt eintragen. Das hängt bei mir mit der Laufzeit zusammen. Vielen Dank dennoch.


  

Betrifft: Du rechnest doch im VBA (Frage offen) von: Tino
Geschrieben am: 27.01.2010 10:07:29

Hallo,
, nur irgendwo müssen ja die Daten zum rechnen herkommen oder.

Laufzeit?
Ich denke die Laufzeit wird eher länger wenn Du alles ins VBA stellst.

Ich kann nicht helfen sorry, Frage offen.

Gruß Tino


  

Betrifft: AW: Du rechnest doch im VBA (Frage offen) von: Rene
Geschrieben am: 27.01.2010 10:12:14

jaja, die Daten kommen aus einem Tabellenblatt. Das hat ca. 25.000 Zeilen und 25-45 Spalten.

Und in Variablen lesen geht schnell. Das Schreiben ins Tabellenblatt ist der Zeitfresser. Und deswegen möchte ich hier nur die Ergebnisse nachher eintragen und keine Zwischenschritte. Wenn man nur paar Zeilen hast, kann man den Unterschied nicht ausmachen und messen. Aber die Masse machts halt :-). Dennoch vielen Dank.


  

Betrifft: AW: Du rechnest doch im VBA (Frage offen) von: fcs
Geschrieben am: 27.01.2010 11:09:02

Hallo Rene,

ich noch einmal. Wenn man es ordentlich programmiert, dann ist das Erzeugen der Formeln im Tabellenblatt mit anschließender Neuberechnung fast immer schneller als berechnen via VBA.
Wichtig ist dabei natürlich dann die Bildschirmaktualisierung und ggf. zeitweise die automatische Berechnung während der Makroausführung zu deaktivieren.

Zeit-Problematisch sind natürlich Formeln mit Matrix-Operationen oder Formelergebnisse, die in viele Folgeberechnungen außerhalb der Zeile einfliessen in der sich die Formel befindet. Da hat Excel dann ggf. einiges an iterativen Berechnungen durchzuführen.

Viele schnelle Tabellenfunktionen kann man mit in Arrays eingelesenen Daten nicht durchführen. Solche Matrix-Operationen in VBA umzusetzen bedeutet dann oft mit geschachtelten For-Next-Schleifen arbeiten zu müssen und das kann bei Zeilenzahlen von 25000 auch dauern. Schneller ist dann unter VBA oft die Nutzung der Find-Methode im Tabellenblatt bzw. mit entsprechenden Range-Objekten, um relevante Daten auszuwerten.

Viel Erfolg bei der weiteren Umsetzung deines Projekts.
Gruß
Franz


Beiträge aus den Excel-Beispielen zum Thema "Formeln nach vba konvertieren"