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.
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