Clever-Excel-Forum

Normale Version: Excel2013 Formel per VBA in Zelle schreiben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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!
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);"""")"
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!
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
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);"""")"
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.
Hi Erich

Es bleibt dabei, man braucht solche Schleifen nicht wenn man zusammenhängende Bereiche befüllt!
(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!