Wenn Funktion durch Makro einfügen

Bild

Betrifft: Wenn Funktion durch Makro einfügen
von: Alcudio
Geschrieben am: 17.07.2015 15:23:30


Hallo ihr Lieben ich möchte gerne diese WENN funktion
=WENN(S6>1;((F6*12-SUMME(H6:S6))/12);WENN(R6>1;((F6*11-SUMME(H6:R6))/11);WENN(Q6>1; ((F6*10-SUMME(H6:Q6))/10);WENN(P6>1;((F6*9-SUMME(H6:P6))/9);WENN(O6>1;((F6*8-SUMME(H6:O6))/8) ; WENN(N6>1;((F6*7-SUMME(H6:N6))/7);WENN(M6>1;((F6*6-SUMME(H6:M6))/6);WENN(L6>1; ((F6*5-SUMME(H6:L6))/5);WENN(K6>1;((F6*4-SUMME(H6:K6))/4);WENN(J6>1;((F6*3-SUMME(H6:J6))/3); WENN(I6>1;((F6*2-SUMME(H6:I6))/2);F6-H6))))))))))) in die Zeile V6 einfügen. Ich komme nach 2 Stunden probieren einfach nicht weiter kann mir jemand helfen?
Ich verursache hiermit
ActiveCell.Select
ActiveCell.FormulaR1C1 =IF(S6>1;((F6*12-SUM(H6:S6))/12);IF(R6>1;((F6*11-SUM(H6:R6))/11);IF(Q6>1;((F6*10-SUM(H6:Q6))/10);IF(P6>1;((F6*9-SUM(H6:P6))/9);IF(O6>1;((F6*8-SUM(H6:O6))/8);IF(N6>1;((F6*7-SUM(H6:N6))/7);IF(M6>1;((F6*6-SUM(H6:M6))/6);IF(L6>1;((F6*5-SUM(H6:L6))/5);IFK6>1;((F6*4-SUM(H6:K6))/4);IF(J6>1;((F6*3-SUM(H6:J6))/3);IF(I6>1;((F6*2-SUM(H6:I6))/2);F6-H6)))))))))))
ActiveCell.Offset(1, 0).Range("A1").Select
immer nur den gleichen 1004 Fehler...
Vielen Dank!

Bild

Betrifft: AW: Wenn Funktion durch Makro einfügen
von: Daniel
Geschrieben am: 17.07.2015 15:41:38
Hi
füge die Formel von Hand ein und zeichne mit dem Recorder auf, dann siehst du wie es geht.
auf den ersten Blick fallen folgende Fehler auf:
1. keine Anführungszeichen am anfang und Ende (die Formel ist für Excel ein Textstring)
2. Zelladressen in A1-Schreibweise obwohl du mit .FormulaR1C1 angegeben hast, dass du die Zelladressen in R1C1 schreiben willst
3. du verwwendest zwar englische Formelnamen, aber das deutsche Parametertrennzeichen (Semikolon)
du kannst zwar auch mit .FormulaLocal die Formel in deutsch eingeben, aber wenn du dich für eine Sprachversion entschieden hast, musst du diese auch konsequent beibehalten (Mischen geht natürlich nicht)
weiterhin könnte die Länge ein problem sein, da VBA nur Formeln mit begrenzter Länge an Excel übergeben kann (von Hand kann man wesentlich längere Formeln eingeben)
Gruß Daniel

Bild

Betrifft: AW: Wenn Funktion durch Makro einfügen
von: Alcudio
Geschrieben am: 17.07.2015 16:17:58
Hallo Daniel genau so habe ich es auch immer wieder probiert leider komme ich einfach zu keiner Lösung bin mittlerweile beim 17Makro das ich aufzeichne und verbesser leider ohne Erfolg trotzdem besten Dank dür deine Hilfe!

Bild

Betrifft: AW: Wenn Funktion durch Makro einfügen
von: Daniel
Geschrieben am: 17.07.2015 17:02:20
Hi
probiers erstmal mit ner kürzern Formel (also so, dass sie in eine Zeile passt)
wenn du verstanden hast, wie das geht, dann kümmern wir uns darum, wie du lange Formeln in eine Zelle bekommst.
Bei VBA-nein ist das halt nicht so ganz einfach, da musst du ja erst auch mal das ganze Makroschreiben und so lernen.
Gruß Daniel

Bild

Betrifft: AW: Wenn Funktion durch Makro einfügen
von: Klexy
Geschrieben am: 17.07.2015 15:48:09
Ein guter Tip für solche Sachen ist immer der Makro-Rekorder. Einfach aufzeichnen und schaun, was er macht.

Sub mit_Makro_Rekorder()
    Range("V6").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-3]>1,((RC[-16]*12-SUM(RC[-14]:RC[-3]))/12),IF(RC[-4]>1,((RC[-16]*11-SUM(RC[-14] _
:RC[-4]))/11),IF(RC[-5]>1, ((RC[-16]*10-SUM(RC[-14]:RC[-5]))/10),IF(RC[-6]>1,((RC[-16]*9-SUM(RC[-14]:RC[-6]))/9),IF(RC[-7]>1,((RC[-16]*8-SUM(RC[-14]:RC[-7]))/8), IF(RC[-8]>1,((RC[-16]*7-SUM(RC[-14]:RC[-8]))/7),IF(RC[-9]>1,((RC[-16]*6-SUM(RC[-14]:RC[-9]))/6), IF(RC[-10]>1,((RC[-16]" & _
        "C[-14]:RC[-10]))/5),IF(RC[-11]>1,((RC[-16]*4-SUM(RC[-14]:RC[-11]))/4),IF(RC[-12]>1,(( _
RC[-16]*3-SUM(RC[-14]:RC[-12]))/3), IF(RC[-13]>1,((RC[-16]*2-SUM(RC[-14]:RC[-13]))/2),RC[-16]-RC[-14])))))))))))"
End Sub

Allerdings dreht er bei so langen Formeln meistens am Zeilenumbruch durch.
In der zweiten Zeile fehlen am Anfang diese Zeichen: *6-SUM(R
So sieht es dann korrigiert aus:
Sub mit_Korrektur()
    Range("V6").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-3]>1,((RC[-16]*12-SUM(RC[-14]:RC[-3]))/12),IF(RC[-4]>1,((RC[-16]*11-SUM(RC[-14] _
:RC[-4]))/11),IF(RC[-5]>1, ((RC[-16]*10-SUM(RC[-14]:RC[-5]))/10),IF(RC[-6]>1,((RC[-16]*9-SUM(RC[-14]:RC[-6]))/9),IF(RC[-7]>1,((RC[-16]*8-SUM(RC[-14]:RC[-7]))/8), IF(RC[-8]>1,((RC[-16]*7-SUM(RC[-14]:RC[-8]))/7),IF(RC[-9]>1,((RC[-16]*6-SUM(RC[-14]:RC[-9]))/6), IF(RC[-10]>1,((RC[-16]" & _
        "*6-SUM(RC[-14]:RC[-10]))/5),IF(RC[-11]>1,((RC[-16]*4-SUM(RC[-14]:RC[-11]))/4),IF(RC[- _
12]>1,((RC[-16]*3-SUM(RC[-14]:RC[-12]))/3), IF(RC[-13]>1,((RC[-16]*2-SUM(RC[-14]:RC[-13]))/2),RC[-16]-RC[-14])))))))))))"
End Sub

Wie macht man das? Die Excel-Formel Schritt für Schritt mit dem Code vergleichen - dann kommt man früher oder später auf den Fehler.

Bild

Betrifft: AW: Wenn Funktion durch Makro einfügen
von: Alcudio
Geschrieben am: 17.07.2015 16:14:29
Klexy vielen vielen Dank für die Hilfe ich wäre ohne dich wirklich nicht weiter gekommen. Fange gerade erst mit Makros an. Habe nun das Problem das ich das Makro so übernommen habe. Leider funktioniert es nicht da ein Syntaxfehler auftaucht was mache ich nun falsch?

Bild

Betrifft: AW: Wenn Funktion durch Makro einfügen
von: Klexy
Geschrieben am: 17.07.2015 16:41:43
Das liegt an der Formatierung hier im Forum.
Wenn du das in den VBA-Editor reinkopierst, ist alles rot bis auf 4 schwarze Unterstriche. Das sind die Umbruchzeichen im VBA-Editor. Das erste und das dritte hab ich gemacht und die sind in Ordnung.
Das zweite und das vierte ist falsch.
Du musst den Unterstrich hier löschen und die nächste Zeile hier wieder anschließen lassen:
SUM(RC[-14] _
SUM(RC[-14]:RC[-4]))
Dabei musst du aufpassen, dass nicht einmal ein Leerzeichen dazwischen kommt.
und hier:
IF(RC[- _
IF(RC[-12]

Bild

Betrifft: AW: Wenn Funktion durch Makro einfügen
von: Klexy
Geschrieben am: 17.07.2015 16:48:49
Oder du lässt die Umbrüche und machst richtige Umbrüche daraus, also die Zeile mit Gänsefüßchen abschließen, Leerzeichen, &, noch ein Leerzeichen und dann den Unterstrich. Die folgende Zeiel musst du wieder mit einem Gänsefüßchen beginnen, weil (wie Daniel schon gesagt hat) die Formel ein Textstring ist, der immer in Anführungszeichen gehört.
Du kannst die Formel überall umbrechen, wenn du es richtig machst. Sinnvollerweise allerdings nicht mitten in Ausdrücken wie ich es hier gemacht habe, weil das die Übersichtlichkeit stark beeinträchtigt.

Sub mit_Korrektur2()
    Range("V6").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-3]>1,((RC[-16]*12-SUM(RC[-14]:RC[-3]))/12),IF(RC[-4]>1,((RC[-16]*11" & _
        "-SUM(RC[-14]:RC[-4]))/11),IF(RC[-5]>1, ((RC[-16]*10-SUM(RC[-14]:RC[-5]))/10)," & _
        "IF(RC[-6]>1,((RC[-16]*9-SUM(RC[-14]:RC[-6]))/9),IF(RC[-7]>1,((RC[-16]*8-SUM(" & _
        "RC[-14]:RC[-7]))/8), IF(RC[-8]>1,((RC[-16]*7-SUM(RC[-14]:RC[-8]))/7),IF(RC[-9" & _
        "]>1,((RC[-16]*6-SUM(RC[-14]:RC[-9]))/6), IF(RC[-10]>1,((RC[-16]" & _
        "*6-SUM(RC[-14]:RC[-10]))/5),IF(RC[-11]>1,((RC[-16]*4-SUM(RC[-14]:RC[-11]))/4)" & _
        ",IF(RC[-12]>1,((RC[-16]*3-SUM(RC[-14]:RC[-12]))/3), IF(RC[-13]>1,((RC[-16]*2-" & _
        "SUM(RC[-14]:RC[-13]))/2),RC[-16]-RC[-14])))))))))))"
End Sub


Bild

Betrifft: AW: Wenn Funktion durch Makro einfügen
von: Daniel
Geschrieben am: 17.07.2015 17:08:15
Hi
sowas kann auch für den VBA-Editor schnell zu lang werden.
besser ist dann, mit einer Variablen zu arbeiten:
dim Fo as string

Fo = "=IF(RC[-3]>1,((RC[-16]*12-SUM(RC[-14]:RC[-3]))/12),IF(RC[-4]>1,((RC[-16]*11"
Fo = Fo & "-SUM(RC[-14]:RC[-4]))/11),IF(RC[-5]>1, ((RC[-16]*10-SUM(RC[-14]:RC[-5]))/10),"
...
Fo = Fo & "SUM(RC[-14]:RC[-13]))/2),RC[-16]-RC[-14])))))))))))"
Range("V6").FormulaR1C1 = Fo
kleiner Tip noch am rande, wenn man Formeln in R1C1 schreibt, sollte man soviele Zellbezüge wie möglich absolut setzen und nur die relativ lassen, die unbedingt relativ sein müssen.
dann fallen beispielsweise die eckigen Klammern weg.
gruß Daniel

Bild

Betrifft: ich hab mal Deine Formel untersucht ...
von: der neopa C
Geschrieben am: 17.07.2015 15:54:33
Hallo,
... die kann man unter Verwendung eines Bereichsnamens wesentlich kürzen.
Ich hab bei aktivierter Zelle V6 (in Tabelle Tabnelle1) einen Bereichsnamen SpW wie folgt definiert:

=WENNFEHLER(VERWEIS(9;1/(Tabelle1!$H6:$S6>1);SPALTE(Tabelle1!$A$1:$L$1));1)
Unter dessen Verwendung reduziert sich die Formel in V6 auf:
=(SpW*F6-SUMME(H6:INDEX(6:6;SPALTE(G1)+SpW)))/SpW oder einnfach
=(SpW*F6-SUMME(H6:INDEX(6:6;7+SpW)))/SpW
Als Formel könnte man diese in der Spalte V natürlich nach unten kopieren.
Gruß Werner
.. , - ...

Bild

Betrifft: AW: ich hab mal Deine Formel untersucht ...
von: Alcudio
Geschrieben am: 17.07.2015 16:19:32
Hallo Werner vielen Dank für deine Antwort leider ist mein Level in Excel lang nicht so fortgeschritten wie deins somit krieg ich deinen Ansatz leider nicht in meine Tabelle kopiert. Trotzdem besten Dank für den Vorschlag!

Bild

Betrifft: AW: ich hab mal Deine Formel untersucht ...
von: Luschi
Geschrieben am: 17.07.2015 20:59:14
Hallo Alcudio,
ich finde es schon etwas merkwürdig, daß Du Excel-Unwissen vorschiebst, Werners Vorschlag NICHT mal zu testen bzw. nachzufragen.
Wenn Du Dich so verweigerst, dann kann man wohl darauf verzichten, Dir weiter zu helfen.
Gruß von Luschi
aus klein-Paris
PS: neopa (Werner) ist ein geduldiger Excel-Mitstreiter und hilft, wo er kann - doch solche abwinkende Antwort Deinerseits sind einfach demotivierend!
Ich glaube kaum, daß Du überhaupt Deine 1. gepostete Formel erkären kannst...

Bild

Betrifft: zu Reaktionen auf Hilfestellungen in Foren ...
von: der neopa C
Geschrieben am: 18.07.2015 11:32:53
Hallo Luschi,
... Dein Beitrag ist mir gegenüber gut gemeint und ich danke Dir deshalb auch sehr dafür.
Doch ich will und muß Alcudio in Schutz nehmen. Er als Fragesteller hat auf alle (Erst-)beiträge aller drei Helfer sachlich und zeitnah reagiert und sich darüber hinaus bei allen für ihre Hilfe bedankt. Damit gehört er nach meine Erfahrungen schon fast zu einer absoluten Minderheit von Fragestellern. Das ist leider so.
Ich kann nachvollziehen dass Alcudio nicht nur eine Lösung für sein geschildertes Problem haben möchte, sondern diese auch weitest möglichst verstehen möchte. Auch kann ich auf Grund Seiner Aussage verstehen, dass er sich mit meinen Vorschlag nicht weiter beschäftigen wollte, zumal er ja von Haus aus eine VBA-Lösung für seine Formellösung gesucht hat.
Die von Alcudio in seinen Beiträgen gezeigte Ehrlichkeit, ist zumindest für mich eher förderlich ihm und anderen ähnlichen Fragestellen weiter zu helfen, als dass sie mich demotivieren würde.
Demotivierend anderen zu helfen, könnten da schon viel eher die vielen (und leider zunehmend mehr werdenden) beitragen, die sich nach geleisteten Hilfebeiträgen sich gar nicht mehr melden. Persönlich hab ich mich damit schon länger "arrangiert". Doch für potentiellen Neueinsteiger als Helfer könnte das ein Problem sein/werden. Ich kann deshalb nur jeden von diesen ermuntern, sich nicht davon abschrecken zu lassen, wenn sie für ihre Hilfeleistung nicht den vielleicht erhofften Dank oder wenigstens eine Rückmeldung erhalten.
Ich sehe es so: Hilfe für Andere, ist oft auch Hilfe für sich selbst.
Gruß Werner
.. , - ...

Bild

Betrifft: Lernen durch lehren
von: Klexy
Geschrieben am: 18.07.2015 11:43:58
Genau so isses.
Ich z.B. helfe bei Sachen, die ich kann und schon irgendwo angewandt habe.
Aber auch bei Sachen, die mich interessieren, und für die ich mir die Lösung selber erst erarbeiten oder zusammengoogeln muss.
Allerdings ist es meist nicht die Lösung, auf die es ankommt, sondern der Hintergrund. Auch wenn man aus mehreren angebotenen Lösungswegen nur einen übernimmt, lernt man doch aus allen - wenn man will. Manche wollen und erhalten mir den Spaß am Helfen.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Wenn Funktion durch Makro einfügen"