Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel2013 Formel per VBA in Zelle schreiben
#1
Hallo verehrte Forumsmitglieder,

ich versuche mich gerade per VBA eine Formel in eine Zelle zu schreiben.
Leider scheiterte ich bis jetzt mit meinen Versuchen.
Deshalb die Frage an Euch ob Ihr mir helfen könntet. Wie müsste die Syntax der Formel in VBA aussehen?

Die Formel zählt immer um 1 hoch wenn in der Zelle in Spalte A etwas steht. Wenn die Zelle leer ist wird nicht gezählt.
Der nächste Schritt wäre die Formel so abzuändern dass auch nicht hochgezählt wird wenn in Spalte A ein Text steht.
Vielleicht habt Ihr mir hier auch einen Tipp wie das geht und auch wieder in VBA-Syntax umgesetzt werden kann?

PHP-Code:
Sub FormelnPerMakro()
Dim Zelle As Range
Dim Nr 
As Long

'Diese Formel würde ich gerne in die Zellen schreiben
'
=WENN($A8<>"";ANZAHL2($A8:$A$8);"")

For 
Each Zelle In ActiveSheet.Range("E8:E17")
 
Nr Zelle.Row
 Zelle
.FormulaLocal "?????????????????????"
Next Zelle
End Sub 

Vielen Dank im Voraus!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#2
Hi

Code:
Zelle.FormulaLocal ="=WENN($A8<>"""";ANZAHL2($A8:$A$8);"""")"

um jedwede Formel nach VBA zu übertragen gehst Du so vor
  • Selektiere deine Zelle mit der funktionierenden Formel
  • Wechsle mit ALT-F11 in den VBA Editor
  • Rufe mit STRG-G das Direktfenster auf
  • schreibe: ?Replace(Selection.formulalocal,"""","""""")
  • Das Ergebnis kannst Du jetzt kopieren
Damit sich die Formel aber auch anpasst schreibst Du besser
Code:
ActiveSheet.Range("E8:E17").FormulaLocal ="=WENN($A8<>"""";ANZAHL2($A8:$A$8);"""")"
Grüße,
Winny
Antworten Top
#3
Schönen guten Abend und vielen Dank für die Rückmeldung,
damit kann ich schon etwas anfangen.
Das mit dem Direktfenster war mir nicht bekannt.... cool schon wieder etwas gelernt.

Aber wie bekomme ich jetzt noch eine Laufvariable "Nr" in die zu übertragende Formel?
Die erste und letzte Zelladresse in der Formel hier "A8" sollte mittels der Laufvariablen "Nr" in der For-Schleife inkrementiert werden.

Code:
For Each Zelle In ActiveSheet.Range("E8:E17")
Nr = Zelle.Row
Zelle.FormulaLocal = "=WENN($A8]<>"""";ANZAHL2($A8:$A$8);"""")"

'Beim nächsten Durchlauf der For-Schleife sollte die Formel so aussehen:
'Zelle.FormulaLocal = "=WENN($A9]<>"""";ANZAHL2($A8:$A$9);"""")"


Next Zelle

Vielen Dank!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#4
Hi

wozu die Laufvariable? Du kennst doch schon den Bereich(Range("E8:E17")). Hättest du mein Beispiel angewendet würdest Du sehen dass sich die Formel von Zeile zu Zeile verändert und die komplette Schleife unnötig ist

Hier werden jetzt nur Zahlen hochgezählt
Code:
Sub FormelnPerMakro()

    Dim Zelle As Range
    Dim Nr As Long
    
    'Diese Formel würde ich gerne in die Zellen schreiben
    '=WENN($A8<>"";ANZAHL2($A8:$A$8);"")
    
    ActiveSheet.Range("E8:E17").FormulaLocal = "=WENN(ISTZAHL($A8);ANZAHL($A$8:$A8);"""")"
    
    'Macht das selbe wie die eine Zeile oben
    'For Each Zelle In ActiveSheet.Range("F8:F17")
    '    Nr = Zelle.Row
    '    Zelle.FormulaLocal = "=WENN(ISTZAHL($A" & Nr & ");ANZAHL($A$8:$A" & Nr & ");"""")"
    'Next Zelle
End Sub
Grüße,
Winny
Antworten Top
#5
Hi,

(16.05.2015, 20:55)sharky51 schrieb: Zelle.FormulaLocal = "=WENN($A8]<>"""";ANZAHL2($A8:$A$8);"""")"

'Beim nächsten Durchlauf der For-Schleife sollte die Formel so aussehen:
'Zelle.FormulaLocal = "=WENN($A9]<>"""";ANZAHL2($A8:$A$9);"""")"

Du weißt schon, was mit dem $-Zeichen gemacht wird?

Wenn Du die Formeln vergleichst, dann ist das im Anzahl2-Teil falsch gesetzt.

sie müßte so heißen:
Zelle.FormulaLocal = "=WENN($A8]<>"""";ANZAHL2($A$8:$A8);"""")"
Zelle.FormulaLocal = "=WENN($A9]<>"""";ANZAHL2($A$8:$A9);"""")"
Antworten Top
#6
Guten morgen Winny & Ralf,
danke für die Rückmeldung.

Ja das $-Zeichen bedeutet absoluter Bezug, das ist mir klar.

Winny, den Bereich(Range("E8:E17") hatte ich nur mal als Übungsbeispiel verwendet. Aber danke für den Einbau der Laufvariablen.
Die Laufvariable benötige ich für den weiteren Ausbau des Makros  Idea manchmal kommen mir weitere Ideen während ich mich mit der Materie beschäftige!
Die Projektchen wachsen stetig mit der Begeisterung was man so alles in VBA umsetzen kann!!

Ich wünsche Euch noch einen schönen Sonntag.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#7
Hi Erich

Es bleibt dabei, man braucht solche Schleifen nicht wenn man zusammenhängende Bereiche befüllt!
Grüße,
Winny
Antworten Top
#8
(17.05.2015, 10:11)Winny schrieb: Hi Erich

Es bleibt dabei, man braucht solche Schleifen nicht wenn man zusammenhängende Bereiche befüllt!

Hi Winny,

wie ich schon beschrieben habe, das war nur ein Beispiel um einen Einstig in die Materie zu bekommen.
Der Bereich wird letztendlich nicht zusammenhängend sein. Dazwischen passiert noch einiges.

Trotzdem kann ich Deine Lösung gut gebrauchen!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste