Das Clever-Excel-Forum.de - Treffen
... 14.-16. September 2018 im Allgäu ...

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
to 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
to 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
to 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
to 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);"""")"
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to 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
to top
#7
Hi Erich

Es bleibt dabei, man braucht solche Schleifen nicht wenn man zusammenhängende Bereiche befüllt!
Grüße,
Winny
to 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
to top


Gehe zu:


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