Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Formel nach VBA übersetzen

Formel nach VBA übersetzen
30.05.2007 17:09:43
andre
Hallo,
ich benötige eure Hilfe. Wie muss diese Formel in VBA geschrieben werden?
=WENN(L9=0;"";SUMMEWENN(G9:G17;L9;H9:H17))
Gruss Andre

Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 17:13:00
Hajo_Zi
Hallo Andre,
der Makrorecorder liefert da schon brauchbare Ansätze.

AW: Formel nach VBA übersetzen
30.05.2007 17:18:00
andre
Hallo,
dumme Frage, wie bekomme ich die Formel mit dem Makrorecorder aufgezeichnet?
Gruss Andre

AW: Formel nach VBA übersetzen
30.05.2007 17:30:12
Hajo_Zi
Hallo Andre,
Formel in eine Zelle schreiben, Extra, Makro, aufzeichen, die Zelle wählen und Enter.
Gruß Hajo

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 17:28:00
IngGi
Hallo Hajo,
liegst du da nicht falsch? Entscheidend ist doch der Begriff "WorksheetFunction". Und auf den kommst du mit dem Makrorekorder nicht. Ich laß mich natürlich gerne eines Besseren belehren.
Gruß Ingolf

AW: Formel nach VBA übersetzen
30.05.2007 17:34:00
Hajo_Zi
Hallo IngGi,
von WorksheetFunction Stand nichts im Beitrag.
"Hallo,
ich benötige eure Hilfe. Wie muss diese Formel in VBA geschrieben werden?
=WENN(L9=0;"";SUMMEWENN(G9:G17;L9;H9:H17))
Gruss Andre"
Gruß Hajo

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 17:40:03
IngGi
Hallo Hajo,
verstehe, wir hatten die Frage unterschiedlich interpretiert. Ist manchmal gar nicht so einfach, ein Problem exakt zu beschreiben. Oder besser gesagt, es ist manchmal gar nicht so einfach, überhaupt zu bemerken, dass ein Problem nicht exakt beschrieben ist.
Gruß Ingolf

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 17:47:10
Hajo_Zi
Hallo Ingolf,
jetzt sehe ich ach nicht mehr durch nach Andre seinem letzten Beitrag. Er sollte erstmal was zu Klärung schreiben. Ob nun Funktion oder Formel?
Gruß Hajo

AW: Formel nach VBA übersetzen
30.05.2007 17:54:00
andre
Hallo Hajo,
kurze Erklärung:
Ich habe hier eine Tabelle mit VBA-Code. Diese Tabelle berechnet Werte nach einem Klick auf einen Command-Button. Ich habe in dieser Tabelle die von mir genannte Formel eingefügt um eine zusätzliche Berechnung durchzuführen. Ich wollte diese Formel nun an das Ende des VBA-Codes für den Button einfügen, damit sämtliche Bearbeitungen in VBA durchgeführt werden. Darum meine Frage, wie diese Formel in VBA geschrieben wird.
Gruss Andre
PS: Wenn ich das Makro so aufzeichne, wie du vorgegeben hast steht darin nur, das ich die Zelle ausgewählt habe.

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 17:59:00
Hajo_Zi
Hallo Andre,
da habe ich die Frage falsch interpretiert. Da überlasse ich mal Ingolf die Frage.
Gruß Hajo

AW: Formel nach VBA übersetzen
30.05.2007 17:22:00
IngGi
Hallo Andre,
so zum Beispiel:

Sub test()
Dim dblSumme As Double
If Range("L9") = 0 Then
dblSumme = WorksheetFunction.SumIf(Range("G9:G17"), Range("L9"), Range("H9:H17"))
End If
End Sub

Gruß Ingolf

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 17:42:00
andre
Hallo Ingolf,
ich hab die Formel so im VB-Editor eingegeben.
Beim Test gibt es eine Fehlermeldung und auf diese Zeile zeigt ein gelber Pfeil:
If Range("L9") = 0 Then
Zu diesem Tabellenblatt gibt es schon einen VBA-Code (nicht von mir). Ich habe für eine Zusatzberechnung die Formel für eine Zelle eingegeben, würde sie aber gern in den VBA-Code einbinden. Es handelt sich um ein Makro für einen Command Button.
Gruss Andre

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 17:44:53
andre
Hallo Ingolf,
habe noch vergessen, die Fehlermeldung lautet:
Laufzeitfehler 13, Typen unverträglich
Gruss Andre

AW: Formel nach VBA übersetzen
30.05.2007 18:11:46
IngGi
Hallo Andre,
ich hab mir die Beiträge nochmal durchgelesen und stoße auf 2 Probleme:
1. Mir ist jetzt erst aufgefallen, dass du für die Bedingung der WENN-Funktion und für die Bedingung der SUMMEWENN-Funktion jeweils dieselbe Zelle (L9) nimmst. Die SUMMEWENN-Funktion wird dabei nur ausgeführt, wenn L9=0 ist. Aber wenn L9=0 ist, funktioniert die SUMMEWENN-Funktion so nicht. Sie muss dann lauten

dblSumme = WorksheetFunction.SumIf(Range("G9:G17"), ">" & Range("L9"), Range("H9:H17"))

Vorausgesetzt, es soll alles größer 0 summiert werden. Oder noch einfacher ohne Bezugszelle:


dblSumme = WorksheetFunction.SumIf(Range("G9:G17"), ">0", Range("H9:H17"))

Der Laufzeitfehler tritt wahrscheinlich auf, weil der Code nicht im Modul des Tabellenblattes steht. Dadurch beziehen sich die Range-Angaben auf das aktive Tabellenblatt. Nach dem Klicken des CommandButtons ist aber nicht das Tabellenblatt aktiv, sondern der CommandButton. Das kannst du abstellen, indem du die Eigenschaft "TakeFocusOnClick" des CommandButtons auf "False" stellst. Zu den Eigenschaften des CommandButtons gelangst du, indem du in der Symbolleiste "Steuerelement-Toolbox" über das Symbol ganz links den Entwurfsmodus einstellst. Im Entwurfsmodus bekommst du bei einem Rechtsklick auf den CommandButton ein Kontextmenü mit dem Auswahlpunkt "Eigenschaften". Nicht vergessen, den Entwurfsmodus wieder abzuschalten. Nun müsste der Code auch funktionieren, ohne dass du die Range-Angaben ausführlich über Workbook und Worksheet machen musst.
Gruß Ingolf

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 18:38:00
andre
Hallo Ingolf,
ich bekomme leider immer noch diese Fehlermeldung. Vielleicht sollte ich etwas mehr ausholen.
In der Tabelle stehen in einer Spalte 10 Bezeichnungen, in der Spalte daneben steht die Mengenangabe dazu. Doppelnennungen sind möglich, darum wird per Buttonklick die Spalte mit den Bezeichnungen auf Duplikate gefiltert und alle übriggebliebenen Bezeichnungen in eine neue Spalte eingetragen.
Nun wollte ich ganz elegant die Mengenangaben dazu aufaddieren und daneben schreiben. Dazu die o.g. Formel, die im Tabellenblatt super funktioniert. Ich möchte diese Berechnung nun aber im Makro ausführen lassen. Das WENN dient nur dazu, diese Berechnung durchzuführen, wenn in der Nachbarspalte auch eine Bezeichnung steht. Also praktisch so:
Die Formel steht in Zelle M9 und heisst =WENN(L9=0;"";SUMMEWENN(G9:G17;L9;H9:H17)) In den Zellen
M10 - M18 steht dann die gleiche Formel.
Gruss Andre

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 18:50:53
IngGi
Hallo Andre,
wer lesen kann, ist klar im Vorteil. Was ich bezüglich der Zelle L9 gesagt habe, ist natürlich Quatsch. Ich nehme alles zurück und behaupte das Gegenteil. Natürlich wird die SUMMEWENN-Funktion ausgeführt, wenn L9 nicht gleich 0 ist!
Versuch's mal so:

Sub test()
Dim dblSumme As Double
If Range("L9")  "" Then
dblSumme = WorksheetFunction.SumIf(Range("G9:G17"), Range("L9"), Range("H9:H17"))
End If
End Sub

Gruß Ingolf

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 19:02:00
andre
Hallo Ingolf,
ich habe den Code folgendermassen verändert:
If Range("L9") "" Then
Range("M9") = WorksheetFunction.SumIf(Range("G9:G17"), Range("L9"), Range("H9:H17"))
End If
Es funktioniert! Ich danke dir recht herzlich für deinen Support!
Gruss Andre

AW: Formel nach VBA übersetzen
30.05.2007 17:50:00
IngGi
Hallo Andre,
zwei Fragen dazu:
1. Steht das Makro im Modul des Tabellenblattes, auf das sich der Code bezieht? Wenn nein, musst du eventuell überall statt "Range(?)" die komplette Angabe Workbooks("Dateiname.xls").Sheets("Tabellenblattname").Range(?)" angeben.
2. Was für eine Fehlermeldung erhältst du?
Gruß Ingolf

Anzeige
AW: Formel nach VBA übersetzen
30.05.2007 18:01:13
andre
Hallo Ingolf,
1. ja
2. siehe vorigen Beitrag (Nachtrag)
Gruss Andre

AW: Formel nach VBA übersetzen
31.05.2007 00:06:00
Daniel
hi
was möchtest du genau machen:
1. die Formel per VBA in eine Zelle schreiben?
2. die Rechenfunktion direkt in VBA verwenden?
Gruß, Daniel
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Formel in VBA umwandeln: Schritt-für-Schritt-Anleitung


Schritt-für-Schritt-Anleitung

Um eine Excel-Formel wie =WENN(L9=0;"";SUMMEWENN(G9:G17;L9;H9:H17)) in VBA zu übersetzen, folge diesen Schritten:

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).

  3. Schreibe den folgenden Code:

    Sub FormelUmschreiben()
       Dim dblSumme As Double
       If Range("L9") <> "" Then
           dblSumme = WorksheetFunction.SumIf(Range("G9:G17"), Range("L9"), Range("H9:H17"))
           Range("M9") = dblSumme
       End If
    End Sub
  4. Schließe den VBA-Editor und teste das Makro, indem du einen Command-Button zu deinem Arbeitsblatt hinzufügst und das Makro mit diesem Button verknüpfst.


Häufige Fehler und Lösungen

  1. Laufzeitfehler 13 (Typen unverträglich): Dieser Fehler kann auftreten, wenn sich die Range-Angaben nicht auf das aktive Blatt beziehen. Stelle sicher, dass dein Makro im richtigen Modul gespeichert ist und die Referenzen korrekt sind.

  2. Fehler bei der Verwendung von If Range("L9") = 0 Then: Dies muss geändert werden in If Range("L9") <> "" Then, um sicherzustellen, dass die Zelle nicht leer ist.

  3. Makro funktioniert nicht wie erwartet: Überprüfe die Eigenschaft TakeFocusOnClick des Command-Buttons, um sicherzustellen, dass der Code nicht unterbrochen wird.


Alternative Methoden

  • Excel Formel zum Übersetzen: Du kannst auch direkt die Excel-Formel in die Zelle schreiben, anstatt sie in VBA zu verwenden. Dies ist besonders nützlich, wenn du nur eine einfache Berechnung benötigst und keine komplexe Logik erforderlich ist.

  • Excel VBA Translate Formula Language: Verwende die Evaluate-Methode, um Excel-Formeln direkt in VBA zu nutzen, z.B. Range("M9").Value = Application.Evaluate("=WENN(L9=0;"""";SUMMEWENN(G9:G17;L9;H9:H17))").


Praktische Beispiele

Hier ist ein Beispiel, wie du eine Excel-Formel in VBA nutzen kannst:

Sub Beispiel()
    Dim dblSumme As Double
    If Range("L9") <> "" Then
        dblSumme = WorksheetFunction.SumIf(Range("G9:G17"), Range("L9"), Range("H9:H17"))
        Range("M9").Value = dblSumme
    End If
End Sub

In diesem Beispiel wird die Menge in einer Spalte automatisch übersetzt, indem die Formel in VBA verwendet wird.


Tipps für Profis

  • Nutze den Makrorecorder, um dir erste Ansätze für deine VBA-Codes zu generieren. Du kannst dann den Code anpassen, um ihn effizienter zu gestalten.

  • Wenn du häufig Formeln in VBA verwendest, erstelle eine Sammlung von Funktionen, die du einfach wiederverwenden kannst. So kannst du Zeit sparen und deine Codes sauberer halten.

  • Überlege, wie du deine Excel-Formeln in VBA optimieren kannst, um die Berechnungen zu beschleunigen, insbesondere bei großen Datenmengen.


FAQ: Häufige Fragen

1. Wie kann ich eine Excel-Formel automatisch übersetzen?
Du kannst die Formel in den VBA-Editor eingeben und die WorksheetFunction-Objekte nutzen, um Excel-Funktionen direkt in deinem VBA-Code zu verwenden.

2. Was ist der Unterschied zwischen einer Excel-Formel und einer VBA-Funktion?
Eine Excel-Formel wird direkt in eine Zelle eingegeben, während eine VBA-Funktion in einem Makro ausgeführt wird und oft komplexere Logik oder Automatisierung ermöglicht.

3. Wie kann ich mehrere Zellen gleichzeitig in VBA bearbeiten?
Du kannst Schleifen verwenden, um durch die Zellen zu iterieren und die gewünschten Berechnungen anzuwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige