Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1132to1136
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
Inhaltsverzeichnis

Formeln nach vba konvertieren

Formeln nach vba konvertieren
Rene
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?

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Formeln nach vba konvertieren
27.01.2010 08:43:31
fcs
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
Anzeige
vielen Dank für den Tipp
27.01.2010 09:34:04
Rene
Hilft mir zwar nicht wirklich weiter, aber dennoch vielen Dank für den Tipp.
AW: Formeln nach vba konvertieren
27.01.2010 08:43:45
Tino
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
Anzeige
vielen Dank für den Tipp.
27.01.2010 09:38:11
Rene
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.
Du rechnest doch im VBA (Frage offen)
27.01.2010 10:07:29
Tino
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
AW: Du rechnest doch im VBA (Frage offen)
27.01.2010 10:12:14
Rene
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.
Anzeige
AW: Du rechnest doch im VBA (Frage offen)
27.01.2010 11:09:02
fcs
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige