Excel VBA - Einfügen einer Formel in eine Zelle

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Junior.

    Excel VBA - Einfügen einer Formel in eine Zelle

    Hallo Liebes Forum!

    Ich habe eine Liste, in welche ich durch eine Userform Einträge eintrage. Um einen neuen Eintrag zu starten habe ich Folgenden Code


    Quellcode

    1. Private Sub CommandButton1_Click()
    2. Dim lZeile As Long
    3. lZeile = 2
    4. Do While Trim(CStr(Master.Cells(lZeile, 2).Value)) <> ""
    5. lZeile = lZeile + 1
    6. Loop
    7. Master.Cells(lZeile, 1) = CStr(lZeile)
    8. ListBox1.AddItem CStr(lZeile)
    9. ListBox1.ListIndex = ListBox1.ListCount - 1
    10. TextBox1.SetFocus
    11. End Sub


    Nun möchte ich gerne Fortlaufend in den Zellen

    Quellcode

    1. Master.Cells(lZeile, 16)
    die Formel : "=WENN(N357="in time";"offen";WENN(N357="today";"offen";WENN(N357="late";"offen";"")))",

    Quellcode

    1. Master.Cells(lZeile, 17)
    die Formel : "=WENN(N357="done";"Fertig";WENN(N357="in time";"Noch Zeit";WENN(N357="today";"Heute";WENN(N357="late";"Zu Spät";""))))" ,

    Quellcode

    1. Master.Cells(lZeile, 18)
    die Formel : "=WENN(Q357="Fertig";1;0)" ,

    Quellcode

    1. Master.Cells(lZeile, 19)
    die Formel : "=WENN(P357="Offen";1;0)" ,

    Quellcode

    1. Master.Cells(lZeile, 20)
    die Formel : "=WENN(G359="x";WENN(N359="done";0;1);0)",

    Quellcode

    1. Master.Cells(lZeile, 21)
    die Formel : "=WENN(H357="x";WENN(N357="done";0;1);0)"

    eintragen.

    Ich habe gegoogelt und probiert und gemacht und getan und nochmal probiert aber ich scheine auf dem Schlauch zu stehen.

    Kann mir jemand einen Denkanstoß geben?

    Vielen Dank!

    - Junior
    VBA verlangt die Formel im internationalen (EN-US) Format.
    Die Default-Property von Range ist "Value". Du musst schon eine der Formula-Properties füllen.
    Master.Cells(lZeile, 16).FormulaR1C1 = "=IF(R357C14=""in time"",""offen"",IF(R357C14=""today"",""offen"",IF(R357C14=""late"",""offen"","""")))"
    Und dann solltest du noch wissen, ob du relative oder absolute Adressierung verwenden willst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke für die schnelle Rückmeldung!

    Die Formel in R1C1 umzubauen, habe ich auch schon versucht, bin aber auf folgendes Problem gestoßen

    Quellcode

    1. Master.Cells(lZeile, 16).FormulaR1C1
    bezieht sich ja auf eine nicht fest definierte Zelle.

    Es wird ja die erste leere Zeile gesucht und "ausgewählt":

    Quellcode

    1. lZeile = 2
    2. Do While Trim(CStr(Master.Cells(lZeile, 2).Value)) <> ""
    3. lZeile = lZeile + 1
    4. Loop


    Also sollte sich die Formel ja auch auf die Werte in der jeweiligen Zeile beziehen. Deshalb hat der individuelle Zellbezug bei mir nie Funktioniert und ich wusste nie ob ich das R1C1-Format falsch angewandt habe oder woran es sonst gehakt hat... Das ist das große Problem an dem ich nicht weiter komme! :(

    EDIT: Tut mir Leid, das hatte ich nicht klar in der Problemstellung kommuniziert! Verzeih mir!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Junior“ ()

    Du möchtest was?

    Die erste Zeile suchen, die in Spalte 1 leer ist?
    Oder die Zeile nach der letzen gefüllten Zelle in Spalte 1?

    Dort möchtest du die Formeln bezogen auf dieselbe Zeile eintragen?

    Visual Basic-Quellcode

    1. lZeile = Master.Cells(Rows.Count,1).End(xlUp).Row + 1
    2. Master.Cells(lZeile, 16).FormulaR1C1 = "=IF(RC14=""in time"",""offen"",IF(RC14=""today"",""offen"",IF(RC14=""late"",""offen"","""")))"
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Fast, wie gesagt, tut mir leid, ich habe mich nicht klar genug ausgedrückt. :(

    Ich suche die erste leere Zeile und gebe ihr dann eine ID, in dem Fall die Zeilennummer. Das funktioniert soweit auch sehr gut!

    Nun möchte ich, das in dieser "neuen" Zeile die Spalte 16 eine Formel mit Bezügen zu nur dieser "neuen" Zeile erhält.

    Quellcode

    1. Master.Cells(lZeile, 16).FormulaR1C1 = "=IF(R?C14=""in time"",""offen"",IF(R?C14=""today"",""offen"",IF(R?C14=""late"",""offen"","""")))"


    Ich hoffe, es ist jetzt halbwegs verständlich erklärt. :/

    Danke schon mal für die Mühe! Ich tue mein Bestes!
    Oh Gott, tut mir leid, ich dachte du hättest mich missverstanden und habe deshalb nicht durchgetestet!

    Funktioniert ganz toll! Jetzt verstehe ich auch warum in die Zelle "$N403" ausgeworfen wird wenn man in VBA "RC14" eingibt!

    Vielen Lieben Dank, jetzt habe ich es endlich verstanden!!