Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1392to1396
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

Schleifenproblem Ausgabe

Schleifenproblem Ausgabe
29.11.2014 08:18:33
Andrea
https://www.herber.de/bbs/user/94103.xlsm
Guten morgen!
Ich habe ein Problem mit der Ausgabe einer Schleife (innerhalb einer vba-Function) in eine Tabellenspalte (Excel) und hoffe, hier kann mir jemand helfen.
Die Datei ist als Anhang beigefügt.
Es geht darum, dass ich ein Summenprodukt rekursiv bestimmen möchte in einer Funktion An, mir die Ausgabe aber immer im Schleifendurchlauf alle vorherigen, richtigen Werte überschreibt und damit das gewünschte Ergebnis natürlich falsch wird (bis auf den Eintrag in der letzten Zelle).
Die Funktion SOLL folgendermaßen rechnen und eintragen:
A0 := 0 (ist Definition) [einzutragen in F2]
A1 = A0 + D1*B1 [einzutragen in F3]
A2 = A1 + D2*B2 [einzutragen in F4]
A3 = A2 + D3*B3 [einzutragen in F5]
:
:
Bzw. anders dargestellt (vielleicht hilft euch das weiter?)
A0 := 0
A1 = D1*B1
A2 = D1*B1 + D2*B2
A3 = D1*B1 + D2*B2 + D3*B3
:
:
Wenn ich also z.B. A3 (Function An(ByVal intN As Integer) As Double , intN ist dann 3) berechne, sollen die korrekten Berechnung von A0, A1 und A2 jeweils in der F-Spalte in [F1 beinhaltet Spaltenüberschrift] F2, F3 und F4 stehen (bleiben) und der A3-Wert danach in Zelle F5 ergänzt werden.
Insgesamt also intN+1 richtige Werte, alle Werte richtig.
Nun TUT meine Funktion aber leider folgendes: (Auch wieder am Beispiel von A3)
Zelle F0: 0 (richtig... aber wohl leider nur wegen der Hardcodierung)
Zelle F1
Zelle F2
Zelle F3 korrekter Wert
Insgesamt also nur 1 richtiger Wert und zwar der ganz am Schluss.
Es ist egal, für welche Laufzeiten ich das Summenprodukt berechne, meine Funktion rechnet IMMER richtig. Sie weiß, wo sie beginnen muss und sie weiß, in welcher Zeile sie enden muss und dort schreibt sie immer das richtige Ergebnis rein. Soweit gut.
Allerding werden nun dummerweise alle Werte davor nicht mehr dargestellt bzw. durch die Schleifendurchläufe überschrieben.
Was mache ich denn falsch?
Vielen Dank für eure Hilfe und liebe Grüße,
Andrea

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleifenproblem Ausgabe
29.11.2014 09:07:56
RPP63
Guten Morgen!
Mir ist nicht klar, warum Du nicht einfach diese simple Formel nimmst (Formel aus F3 lässt sich nach unten ziehen):
 ABCDEF
1Spalte ASpalte BSpalte CSpalte DSpalte ESpalte F
201,1 3 0
312,2 2 3,3
423,3 5 7,7
534,4 11 24,2
645,5 1 72,6
756,6 7 78,1

ZelleFormel
F3=F2+D2*B2
F4=F3+D3*B3
F5=F4+D4*B4
F6=F5+D5*B5
F7=F6+D6*B6

Gruß, Ralf

Anzeige
AW: Schleifenproblem Ausgabe
29.11.2014 09:10:35
Andrea
Hallo Ralf,
danke für deine Antwort.
Hmm... das hatte ich jetzt ganz vergessen zu erwähnen, ich DARF es nur über vba machen und im Excel ausgeben lassen.
Mit Runterziehen im Excel ist also leider nicht :-( . Sonst wäre es sehr einfach, ja.
LG, Andrea

AW: Schleifenproblem Ausgabe
29.11.2014 09:12:45
hary
Moin
Brauchst du wirklich eine eigene UDF? Oder ist das nur zum ueben?



Tabelle1
 F
1Spalte F
20
33,3
47,7
524,2
672,6
778,1

verwendete Formeln
Zelle Formel Bereich R1C1 für Add In
F2:F7=An(F1;B1;D1)  =An(R[-1]C,R[-1]C[-4],R[-1]C[-2])

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit
Public Function An(F As Range, B As Range, D As Range) As Double
If Not IsNumeric(G) Then
An = 0
Else
An = F + (D * B)
End If
End Function

gruss hary

Anzeige
Morjeeen ,...
29.11.2014 09:37:56
Matze
Hallo Andrea,
Hi hary, alter Rocker (und alls gut eingemottet u. warm verpackt?)
Vorschlag zur Formel in F2 =WENNFEHLER(An(A1;B1;D1);0)
Da mit "Null" gerechnet wird, würde #Wert als Fehlermeldung kommen.
Gruß Matze

AW: Morjeeen ,...2ter Teil,..
29.11.2014 09:40:19
Matze
Hi ,
ooops hatte Tippfehler, betrachtet vorangegangenes als nichtig.
Matze

AW: @ Matze
29.11.2014 09:48:19
hary
Moin
Klar, alles eingemottet. Nu warten wir auf die naechste Saison.
gruss hary

AW: Schleifenproblem Ausgabe
29.11.2014 10:57:35
Andrea
Hallo hary,
danke für deine Mühe.
Was ist denn eine UDF?
Naja, meine Function An ist Teil eines sehr komplexen Programmes für die Uni. Dieses Programm kommt bei der eigentlichen Zielwertberechnung performancetechnisch sehr ins Rudern. Soll heißen, die "finale" Funktionsauswertung dauert viiiiiel zu lange. (Teilweise bis zu 10min für intN = 40 und das nur, weil ich (vor dem Umprogrammieren) zu viele Schleifen aufgerufen habe, die wiederum Schleifen gerufen haben und die sind dann immer alle aufs neue durchgegangen und geschrieben worden.)
Ich habe daraufhin jede Funktion, die an der Endberechnung beteiligt ist, durchgeschaut und dabei meine Function An als potenziellen Übeltäter entlarvt.
Meine betreuende Professorin hat dies bestätigt. Also muss ich jetzt diese Function so umbauen, dass meine Excelspalte schneller gefüllt wird.
Jetzt ist diese Schnelligkeitssteigerung deutlich zu spüren, d.h. ich weiß, dass es jetzt richtig ist, nur eben sie gesagt, die Einträge in der Spalte werden dann falsch.
Ich darf meiner Function An auch nur den Parameter intN (also die Laufzeit, Dauer, Zeitpunkte 0, 1, ... intN) mitgeben und sonst nichts.
Eben weil auf dieser Function dann wiederum zig andere Functions aufbauen.
Daher fällt deine Idee, hary, leider auch weg :-( .
Sieht jemand in meinem Code einen Fehler? Also dass ich das "Schreiben"-Kommando vielleicht einfach nur falsch platziert habe?
Oder dass ich es generell einfach zu kompliziert programmiert habe? Vielleicht bin ich mittlerweile schon zu betriebsblind geworden als dass ich die offensichtliche Lösung nicht mehr sehe?
LG und nochmal vielen Dank an dich und alle anderen für die Hilfeversuche,
Andrea

Anzeige
AW: Schleifenproblem Ausgabe
29.11.2014 11:15:11
Andrea
Idee...
... meint ihr es geht, wenn ich meine Excelspalte sukzessive von hinten/unten nach vorne/oben befüllen lasse? Also in meiner Excelspalte F zuerst den letzten Wert berechne und eintragen lasse?
Z.B. bei Werten zu den Zeitpunkten intN = 4 ( d.h. 0, 1, 2, 3, 4), dass ich zuerst A4 berechnen und in F2 bis F6 eintragen lasse, dann A3, der dann ja alle falschen Werte aus A4, d.h. die Zellen F2 bis F5, F6 mit dem richtigen Werte bleibt ja stehen, überschreibt und dann immer so weiter?
Was müsste ich dann im Code umstellen? Hmm... .
LG, Andrea

AW: Schleifenproblem Ausgabe
29.11.2014 11:23:00
Andrea
Idee umgesetzt und Problem gelöst :D
Laut denken und meine Gedanken hier niederschreiben hat geholfen.
Vielen Dank trotzdem noch mal an alle, die sich die Mühe gemacht haben.
LG und ein schönes WE,
Andrea

Anzeige
AW: Schleifenproblem Ausgabe
29.11.2014 12:04:38
hary
Moin
Wenn's passt ist ja gut. Ich hab von alledem, was du zuletzt geschrieben hast, nix verstanden bzw. was wirklich passieren soll.
UDF= User Defined Function
Das ist eine UDF: Public Function An()
Also eine Selbstgeschriebene Funktion.
gruss hary

AW: Schleifenproblem Ausgabe
29.11.2014 12:15:48
Andrea
Hi hary,
danke für die Erklärung.
Ich hatte auf etwas a la "underfunction" getippt... falls so ein seltsames Wort überhaupt existiert^^.
Stimmt, es ist insgesamt leider ein sehr komplexer Zusammenhang. Daher habe ich mit den meisten Details auch hinterm Berg gehalten und auch nur einen Beispielcode angefügt.
Da ist dann aber halt die Gefahr immer groß, dass man eine wichtige Info weglässt.
Wie dem auch sei, es funktioniert nun alles nahezu perfekt :) .
LG, Andrea
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige