Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1436to1440
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wenn Funktion durch Makro einfügen

Wenn Funktion durch Makro einfügen
17.07.2015 15:23:30
Alcudio

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!

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn Funktion durch Makro einfügen
17.07.2015 15:41:38
Daniel
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

Anzeige
AW: Wenn Funktion durch Makro einfügen
17.07.2015 16:17:58
Alcudio
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!

AW: Wenn Funktion durch Makro einfügen
17.07.2015 17:02:20
Daniel
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

AW: Wenn Funktion durch Makro einfügen
17.07.2015 15:48:09
Klexy
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.

Anzeige
AW: Wenn Funktion durch Makro einfügen
17.07.2015 16:14:29
Alcudio
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?

AW: Wenn Funktion durch Makro einfügen
17.07.2015 16:41:43
Klexy
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]

Anzeige
AW: Wenn Funktion durch Makro einfügen
17.07.2015 16:48:49
Klexy
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

Anzeige
AW: Wenn Funktion durch Makro einfügen
17.07.2015 17:08:15
Daniel
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

Anzeige
ich hab mal Deine Formel untersucht ...
17.07.2015 15:54:33
der
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
.. , - ...

Anzeige
AW: ich hab mal Deine Formel untersucht ...
17.07.2015 16:19:32
Alcudio
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!

AW: ich hab mal Deine Formel untersucht ...
17.07.2015 20:59:14
Luschi
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...

Anzeige
zu Reaktionen auf Hilfestellungen in Foren ...
18.07.2015 11:32:53
der
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
.. , - ...

Anzeige
Lernen durch lehren
18.07.2015 11:43:58
Klexy
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.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige