Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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?
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
Anzeige
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
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Formeln in VBA umwandeln


Schritt-für-Schritt-Anleitung

  1. Öffne den Visual Basic for Applications (VBA) Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Starte ein neues Modul: Klicke im Projekt-Explorer mit der rechten Maustaste auf dein Projekt, wähle "Einfügen" und dann "Modul".
  3. Verwende die WorksheetFunction: Viele Excel-Funktionen kannst du direkt in VBA verwenden. Beispiel:
    Cells(Zeile, Spalte) = Application.WorksheetFunction.SumIf(KriterienBereich, Kriterium, Wertebereich)
  4. Aufzeichnen mit dem Makro-Recorder: Wenn du eine Formel umwandeln möchtest, zeichne die Formel im Excel auf, um die VBA-Syntax zu erhalten. Stelle sicher, dass die Aufzeichnungsart auf "Relativ" eingestellt ist.
  5. Anpassung der Variablen: Ersetze feste Zellbezüge durch variable Bereiche, um die Flexibilität deines Codes zu erhöhen.
  6. Optimierungen vornehmen: Entferne unnötige Befehle wie Select oder Activate, um die Ausführungsgeschwindigkeit zu verbessern.

Häufige Fehler und Lösungen

  • Fehler: Unbekannte Funktion: Stelle sicher, dass du die Funktionen in der englischen Syntax verwendest. Beispiel: Application.WorksheetFunction.CountIf statt Application.WorksheetFunction.ZählenWenn.
  • Fehler: Laufzeitfehler: Dies kann auftreten, wenn du versuchst, eine Formel auf einen nicht existierenden Bereich anzuwenden. Überprüfe die Zellreferenzen auf Korrektheit.

Alternative Methoden

  • Benutzerdefinierte Funktionen: Für komplexe Formeln kannst du benutzerdefinierte Funktionen in VBA erstellen. Dies ermöglicht eine flexiblere Handhabung von Formeln.
  • Evaluate-Methode: Du kannst mit Evaluate Formeln berechnen, jedoch ist dies auf einfache Formeln beschränkt. Beispiel:
    Wert = Evaluate("=COUNTIF(B2:B4,5)")

Praktische Beispiele

  1. Beispiel für Summierung:
    Dim Summe As Double
    Summe = Application.WorksheetFunction.Sum(Range("A1:A10"))
  2. Zählen von Werten:
    Dim Anzahl As Long
    Anzahl = Application.WorksheetFunction.CountIf(Range("B1:B10"), ">10")

Tipps für Profis

  • Code-Optimierung: Deaktiviere die Bildschirmaktualisierung und die automatische Berechnung während der Ausführung deines Makros, um die Geschwindigkeit zu erhöhen:
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
  • Matrixoperationen: Sei vorsichtig mit Matrixoperationen in großen Datenmengen. Manchmal ist es effizienter, die Berechnungen direkt im Excel-Blatt vorzunehmen.

FAQ: Häufige Fragen

1. Kann ich jede Excel-Formel in VBA umwandeln?
Nicht jede Formel kann direkt umgewandelt werden. Einige komplexe Formeln erfordern benutzerdefinierte Funktionen.

2. Wie kann ich die Laufzeit meiner VBA-Skripte verbessern?
Vermeide unnötige Berechnungen und nutze die oben genannten Techniken zur Deaktivierung der Bildschirmaktualisierung und der automatischen Berechnung.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige