PDA

Vollständige Version anzeigen : FIFO-Bewertung


herbearm
17.07.2014, 13:22
Hallo Freunde des VBA-Codes,

ich bräuchte Hilfe beim Entwerfen eines Codes für die FIFO-Mehtode. Und zwar geht es um die Bewertung von Auslandswährungen. Ich benötige ein Tabellenblatt auf dem die Zugänge mit Kurs und Eurowert sowie die Abgänge mit Kurs und Eurowert der Fremdwährung abzulesen sind.

Die Tabelle dient für die Buchhaltung und ermöglicht den direkten Vergleich mit dem Buchhaltungssystem, dass nur in EURO gebucht wird.

Für genauere Angaben:
1. Zugang + Kurs eingeben, Eurowert ermitteln (funktioniert einfach über Formel)
2. Abgang: Hier sollen für den Abgang jeweils die ersten noch verfügbaren Fremdwährungstranchen verwendet werden. Diese also mit ihrem jeweiligen Kurs aufaddieren und sofern der Betrag erreicht ist nur noch den Rest für die nächste Zahlung übrig lassen. Hier komme ich nicht weiter, da ich nur rudimentäre Kenntnisse in VBA besitze.
Sofern ein Abgang verzeichnet wird, soll er den ersten Rest verbrauchen + die restlichen Reste bis Summe(Rest)=Abgang entspricht. Aus den verbrauchten Tranchen + Währungskurs, soll mir dann der Wechselkurs des Abgangs und der entsprechende Eurobetrag angegeben werden. Hier benötigt man also DOs oder WHILEs inklusive Zähler oder so? Das übersteigt dann doch meine Fähigkeiten.

Soll ungefähr so aussehen wie angehängt. Wichtig ist, das ich für jeden Abgang den Durchschnittskurs benötige.... Und dann eben die Reste automatisch angepasst werden bei jedem neuen Abgang.

Kann mir jemand etwas schreiben? Beste Grüße Armin

EDIT: Natürlich können Zu- und Abgänge auch in einer Zeile stehen, dass heisst am selben Tag ein/ausgehen.

jack_D
18.07.2014, 07:51
Also um es kurz zu machen, ich hab dein Problem weder aus deiner Mustermappe noch aus deiner BEschreibung erkennen können.

Und da bisher noch keiner geantwortet hat, würde ich das für viele der Mitstreiter hier ebenso annehmen.

1. Versuch dein Problem nochmals aus der Sicht eines unwissenden beschreiben. (Dazu gehört auch die Zellen zu nennen)
2. Du redest von einem Code. Lädtst aber eine xlsx hoch. hast du bereits einige ansätze für einen Code oder erwartest du das wir dir einen kompletten schreiben?
3. Wie sieht es mit einer Formellösung aus? Wäre die in Abhängigkeit deiner konkreten Fragestellung auch denkbar?

Grüße

herbearm
18.07.2014, 09:02
Ok ich sehe schon, mein Fehler -.-

Also es handelt sich um eine FIFO-Methode.
1. Ich erhalte Zahlungen in Auslandswährung zu einem entsprechenden Eurokurs. 2. Bei einem Zahlungsausgang verwende ich die also verschiedene eingegangene Beträge zu unterschiedlichen Kursen. Im Beispiel habe ich also 500 zu 1,365 und 200 zu 1,3584 überwiesen bekommen. Der nächste Zahlungsausgang beträgt 506 in Fremdwährung. Das bedeutet zuerst werden die 500 vollständig zu 1,365 verbraucht und anschließend der Rest von 6 zu 1,3584. Ergibt: Abgang von 506 = (500/1,365)+(6/1,3584) = 370,72 Euro. Und der Kurs beträgt 506/370,72=1,3649 (Hier hatte ich einen falschen Wert eingetragen). Ich benötige diesen Eurowert nach FIFO Methode, den Wechselkurs und die Reste. Damit führe ich quasi das Bankkonto parallel und pflege die Eingänge und Zugänge. Dieser Vorgang dient der Ermittlung der Währungskursdifferenzen zwischen Rechnungseingang/Ausgang und der tatsächlichen Bezahlung.

Die Datei dient nur als Beispiel wie es aussehen könnte. Wie gesagt ich bin VBA Neuling und komme noch nicht mit den komplexen Anweisungen/Syntax/Logik klar.

Ich weiss, dass es wie eine queue funktionieren müsste. Eingänge wären eine queue (zb X), abgänge eine zweite (zb Y). Sofern ein Abgang x eingeht (1. Element in queue X) soll er x=x-y(i) rechnen bis x=0. Die y(i) < x sind fliegen jeweils aus der queue Y bzw. sind dann gleich 0 und das Element y(i) > x soll mit y(i)-x als neuem Wert in Position 1 von queue Y stehen bleiben. x fliegt aus Queue X raus. So würde das FIFO verfahren prinzipiell aussehen.

Allerdings benötige ich für den Abgang x eben auch den aufsummierten Eurobetrag und den durchschnittlichen Kurs des Abgangs (Spalte G-I). MitHilfe von Spalten K und L sehe ich wieviel von den jeweiligen Eingängen noch verwendet werden kann und mit diesen Werten kann ich unkompliziert in N,O den aktuellen Kontostand des Währungskontos in Fremdwährung sowie EURO ablesen und mit dem Buchhaltungssystem vergleichen um zu prüfen ob sich irgendwo ein Fehler (z.B. falscher Kurs) eingeschlichen hat.

Ich habe auch schon hin und her überlegt, aber eine Formellösung wollte mir nicht einfallen, da das ganze doch sehr dynamisch ist?!

Weiss nicht ob diese Erläuterungen was nützen, aber wie gesagt, ich hab schon das Internet durchforstet, finde aber keinen verständlichen Lösungsansatz...

Beste Grüße
Armin

Mc Santa
18.07.2014, 09:08
Hallo,

der Rest in Zelle K3 müsste dann also 194 lauten?

VG

Mc Santa
18.07.2014, 09:24
Hallo,

dann hier mal eine Formellösung, im Anhang auch als Datei:

<br/><b><em>Tabelle1</em></b><table border="1" cellspacing="0" cellpadding="0" style="border-color:#000000; border-width: 1px; font-size:11pt; background-color:#ffffff; padding-left:2pt; padding-right:2pt; "><colgroup><col style="font-weight:bold; width:40px;" /><col style="width:79px;" /><col style="width:30px;" /><col style="width:79px;" /><col style="width:110px;" /><col style="width:104px;" /><col style="width:30px;" /><col style="width:79px;" /><col style="width:79px;" /><col style="width:79px;" /><col style="width:30px;" /><col style="width:79px;" /><col style="width:83px;" /><col style="width:30px;" /><col style="width:91px;" /><col style="width:84px;" /></colgroup><tr style="background-color:#99CCFF; text-align:center; font-weight:bold; "><td>&nbsp;</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">1</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Datum</b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:left; "> </td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Zugang</b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Kurs</b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Wert</b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:left; "> </td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Abgang</b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Kurs </b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Eurowert</b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:left; "> </td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Rest </b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Eurorest</b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:left; "> </td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Kontostand</b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#F2F2F2 ;; text-align:center; "><b>Eurowert </b></td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">2</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">17.07.2014</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">500</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">1,365</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">366,300366300366</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">0</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">0</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; "><b>144</b></td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; "><b>113,455153844143</b></td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">3</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">18.07.2014</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">200</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">1,3584</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">147,232037691402</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">0</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">0</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">4</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">20.07.2014</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">506</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">0,735304802731963</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">688,15</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">5</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">23.07.2014</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">150</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">1,3584</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">110,424028268551</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">0</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">0</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">6</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">24.07.2014</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">200</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">1,3684</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">146,156094709149</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">44</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">32,1543408360129</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">7</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">18.07.2014</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">200</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">0,643086816720257</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">311</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">8</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">19.07.2014</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">100</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">1,23</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">81,3008130081301</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">100</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">81,3008130081301</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">9</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">20.07.2014</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">300</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">0,8</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">375</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:right; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td><td style="border-color:#000000; color:#000000; border-color:#000000; background-color:#FFFFFF ;; text-align:center; ">&nbsp;</td></tr></table><br/><table border="1" cellspacing="0" cellpadding="0" style="border-color:#000000; border-width: 1px;font-size:11pt; background-color:#ffffff; width:800px;padding-left:2pt; padding-right:2pt; "><tr style="background-color:#FFCC66; text-align:center; font-weight:bold; "><td colspan="3" > verwendete Formeln </td><td> </td></tr><tr valign="top" style="background-color:#FFCC66; text-align:center; font-weight:bold; "><td> Zelle </td><td> Formel</td><td> Bereich </td> <td>N/A</td></tr><tr><td>N2:O2</td><td>=SUMME(K:K)</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>H2:H8</td><td>=WENN(G2="";"";G2/I2)</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>I2:I3,I5:I6,E2:E9,I8:I9</td><td>=WENN(H2="";"";G2/H2)</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>K2:K9</td><td>=WENN($C2&lt;&gt;"";MIN(MAX(0;SUMME($C$2:$C2)-SUMME($G$2:$G$9));$C2);"")</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>L2:L9</td><td>=WENN(K2&lt;&gt;"";K2/D2;"")</td><td>&nbsp;</td><td>&nbsp;</td></tr></table><table cellspacing="0" cellpadding="0"><tr style="text-align:left; font-weight:bold; " class="style21"><td style="text-align:left; font-size: xx-small" ><a href="http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip" >Excel-Inn.de</a></td></tr> <tr style="text-align:left; font-weight:bold; " class="style21"><td style="text-align:left; font-size: xx-small" ><a href='http://Hajo-Excel.de/tools.htm' >Hajo-Excel.de</a></td></tr><tr style="text-align:left; font-weight:bold;" ><td style="text-align:left; font-size: xx-small" >XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007</td></tr><tr style="text-align:left; font-weight:bold; " ><td style="text-align:left; font-size: xx-small" > Add-In-Version 18.01 einschl. 64 Bit</td></tr></table><br/>

Hilft dir das weiter?
VG

herbearm
18.07.2014, 09:39
Damnit :D das sieht gut aus. Nur sie Spalte I und H stimmen noch nicht bzw. fehlt die dynamische berechnung des Eurowerts der verwendeten Fremdwährungszahlungen....

Uff und wenn du vielleicht kurz die Formel mit MinMAx erklären könntest. Wenn nicht auch nicht schlimm. Auf jedenfall super sache.

Lernen eine Menge ich noch müssen... :)

Besten Gruß und schonmal vielen Dank!

EDIT: Die Spalten H und I habe ich nur zur Veranschauung gefüllt. In Spalte H soll G2/I2 gerechnet werden. Soweit richtig. In Spalte I jedoch soll die Summe der verwendeten Zahlungen/Zugangskurs auftauchen. Im 1. Fall also 500/1,365 +6/1,3584 = 370,72 ergeben usw. ....

Mc Santa
18.07.2014, 09:52
Hallo,

Doch Spalte I und H funktionieren auch.
Es gibt zwar erst einen Fehler, aber du musst einfach einen der beiden Werte eintragen, der jeweils andere wird dann berechnet.

Zu meiner Formel:
Im Kern berechne ich zunächst die Summe aus den Eingängen bisher und ziehe die Summe aller Abgänge davon ab.
Jetzt muss ich zwei Fälle abfangen:

Alle bisherigen Eingänge reichen nicht aus, um die Abgänge zu decken. Mein Ergenis wäre negativ, also trage ich 0 ein. --> Max(0;Zwischenergebnis1)
Der aktuelle Eingang muss noch gar nicht angetastet werden, um die Abgänge zu ermöglichen. Mein Ergebnis wäre höher, als der Aktuelle Eingang, dann trage ich nur den aktuellen Eingang ein --> Min(Eingang;Zwischenergebnis2)

VG

Edit, ok mir war nicht klar, dass I berechnet wird. Ich schaue noch einmal

herbearm
18.07.2014, 09:53
Ok, hab die Formel verstanden. Kling einleuchtend! Einfach unkompliziert und MEGAHILFREICH...

herbearm
18.07.2014, 10:00
Aber H stimmt doch nicht. Dort müsste wie gesagt 370,72 auftauchen und dementsprechend ein Kusr von 1,3... irgendwas. und nicht 0,735

Mc Santa
18.07.2014, 10:12
Ja, an der Stelle habe ich deine Werte benutzt. Muss mir noch überlegen, wie ich das am besten per Formel berechne...

VG

herbearm
18.07.2014, 10:37
oh man, das wäre so super wenn du das irgendwie hinkriegen würdest. Wie gesagt, hier muss er ja eigentlich ne art schleife durchlaufen... aber vielleicht findest du ja eine formellösung... anyways nochmal vielen Dank

Mc Santa
18.07.2014, 12:04
Hallo,

ich habe im Internet ein funktionierendes Makro gefunden und habe es auf deine Tabelle angepasst. Dabei ist mir aufgefallen, dass du ja durch den Kurs teilst und nicht multiplizierst. In der Formel gibst du das über den letzten Parameter ein: Wahr für Multiplizieren und Falsch für Dividieren.

Im Anhang ist die Tabelle komplett fertig, hier mein angepasster Code:
Damit er funktioniert, darfst du keine negativen Bestände haben, und die erste Zeile muss einen Zugang haben.
Function BuchwertVerbrauch(ByVal Abgang As Range, ByVal Zugang As Range, ByVal Preis As Range, Optional ByVal MalRechnen As Boolean = True) As Double
'Abgang: Menge Abgang/Verbrauch
'Zugang: Menge Zugang
'Preis: Stück-/Einzelpreis der jeweilgen Zugangsmenge
Dim m As Integer
If MalRechnen Then m = 1 Else m = -1
Dim I As Integer, J As Integer
Dim ZeileZugang As Integer, LetzterZugang As Double, LetzterPreis As Double, SummeAbgang As Double
ZeileZugang = 1 '1. Zeile muss immer einen Zugang und Stückpreis enthalten
LetzterZugang = Zugang(ZeileZugang, 1)
LetzterPreis = Preis(ZeileZugang, 1)
SummeAbgang = 0 'Zwischensummierung für die Abgänge
For I = 1 To Abgang.Rows.Count
SummeAbgang = SummeAbgang + Abgang(I, 1)
If SummeAbgang <= LetzterZugang Then
'Abgang verrechnen
BuchwertVerbrauch = Abgang(I, 1) * LetzterPreis ^ m
Else
'Restmenge aus letztem Zugang verrechnen
BuchwertVerbrauch = (LetzterZugang - (SummeAbgang - Abgang(I, 1))) * LetzterPreis ^ m
'Restmenge aus Abgang als neue Zwischensumme für Abgang ermitteln
SummeAbgang = SummeAbgang - LetzterZugang
' Nächsten nicht verbrauchten Zugang ermitteln und gegen Restmenge verrechnen
For J = ZeileZugang + 1 To I
If Zugang(J, 1) > 0 Then
LetzterZugang = Zugang(J, 1)
LetzterPreis = Preis(J, 1)
ZeileZugang = J
If SummeAbgang > LetzterZugang Then
BuchwertVerbrauch = BuchwertVerbrauch + LetzterZugang * LetzterPreis ^ m
SummeAbgang = SummeAbgang - LetzterZugang 'Restmenge aus Abgang
Else
BuchwertVerbrauch = BuchwertVerbrauch + SummeAbgang * LetzterPreis ^ m
Exit For
End If
End If
Next J
End If
Next I
End Function
Quelle des Codes: http://www.herber.de/forum/archiv/784to788/785170_FIFO_Bewertungsmethode_mit_Excel.html

Übrigens:
Falls du die Zellen K und L nur zur Berechnung gebraucht hast, könntest du sie nun streichen.

Fragen und Feedback gerne :)
VG

herbearm
18.07.2014, 14:00
Hmm also wenn ich unter dem 20.7. noch zu bzw. abgänge eingebe geschehen unheimliche dinge... hast du mal versucht die liste zu erweitern.

Ansonsten kann man es auch händisch lösen indem man wenn man einen abgang eingibt zunächst den alten Kontostand abliest. Alter Kontostand - Abgang ergibt dann den Eurobetrag des Abgangs. Diesen trägt man nun per Hand ein und lässt den Kurs errechnen. Weiß nur nicht ob man ihm das auch sagen kann, da der Kontostand nach Eingabe des Abgangs gemindert ist und nicht mehr zur Berechnung dienen kann. Alter Kontostand-neuer Kontostand. Vielleicht könnte man per Makro einfach eine Zwischenzelle verwenden, die jeweils mit dem vorhergehenden Kontostand gefüllt ist und beim nächsten Abgang wiederum ersetzt wird....

Egal wie, du hast mir mit der MinMax Funktion schon mal sehr geholfen... hätte man auch selbst drauf kommen können :D

Vielen Dank schon mal und ein schönes WE, ich schwing mich demnächst mal nach Haus.

Gruß Armin

Mc Santa
18.07.2014, 14:14
So hier noch einmal:

herbearm
18.07.2014, 14:20
SAUGEIL ^^... vielen Dank. Damit können Ordner, Stift und Eingabefehler eleminiert werden.

Super!

Mc Santa
18.07.2014, 14:23
Danke für das Feedback :)

herbearm
21.07.2014, 07:11
Hm hätte da noch was. Ist es möglich mir die verwendeten Beträge ausgeben zu lassen. Im Moment erstelle ich eine Abrechnung durch VBA indem ich ein bereits angelegtes Formular öffne und dann den FW-Betrag, den ermittelten Durchschnittskurs und den Eurobetrag übernehme. Kann ich mir die verwendeten Beträge einzeln irgendwie auflisten lassen im Sinne von... 1. Rest FW, Kurs, Eurobetrag; 2. Betrag FW, Kurs, Eurobetrag etc. ... also in Listenform, dass man sieht welche Beträge für welchen Abgang verwendet wurden?!

Gruß Armin

Mc Santa
21.07.2014, 07:20
Hallo,

Du möchtest also alle Abgänge in einer seperaten Liste auflisten, ohne die Lücken (die durch Zugänge entstehen)?

Viele Grüße

herbearm
21.07.2014, 07:32
Und noch etwas. Ist es möglich, die Rundungsfehler auszumerzen. Ich habe mal ein Beispiel angehangen. Durch die aktuellen Berechnungen kommt es häufig zu Cent-Abweichungen wodurch es später wiederum zu Ausbuchungen kommt. Im Beispiel berechnet er den EUROrest durch Division des FW-Betrags durch den Kurs. Dadurch wird jetzt der ursprüngliche Eurobetrag aufgesplittet und beträgt bei der Abrechnung genau 1 Cent weniger als der Eingang tatsächlich in Euro war (641,66 <> 126,19 + 515,46 = 641,65). Er müsste anstatt den EUROrest zu berechnen die Differenz aus dem ursprünglichen Zugang und dem bereits verwendeten Betrag nehmen und nicht anhand des nun "falschen" Wechselkurses berechnen. Hat jemand eine Idee?

herbearm
21.07.2014, 07:37
Hallo Santa, da bist du ja schon wieder :D

Nein, ich hätte gerne für jeden Abgang eine Auflistung der für diesen Betrag verwendeten Eingänge. Also die Beträge die er aufsummiert (verbleibende Reste + die weitere Zugänge) um den Abgang zu "begleichen"... ungefähr so:
Abgang 1000 USD
1. Rest 100 USD_1,365_73,26 EURO
2. 600 USD_1,367_438,92 EURO
3. 300 USD_1,371_218,82 EURO

Als Abgang berechnet er dann 1000 USD_1,367989_731,00 EURO

Damit kann ich erkennen, welcher Eingang für welchen Abgang wie verwendet wurde.

Mc Santa
21.07.2014, 07:48
Hallo,


Und noch etwas. Ist es möglich, die Rundungsfehler auszumerzen. Ich habe mal ein Beispiel angehangen. Durch die aktuellen Berechnungen kommt es häufig zu Cent-Abweichungen wodurch es später wiederum zu Ausbuchungen kommt. Im Beispiel berechnet er den EUROrest durch Division des FW-Betrags durch den Kurs. Dadurch wird jetzt der ursprüngliche Eurobetrag aufgesplittet und beträgt bei der Abrechnung genau 1 Cent weniger als der Eingang tatsächlich in Euro war (641,66 <> 126,19 + 515,46 = 641,65). Er müsste anstatt den EUROrest zu berechnen die Differenz aus dem ursprünglichen Zugang und dem bereits verwendeten Betrag nehmen und nicht anhand des nun "falschen" Wechselkurses berechnen. Hat jemand eine Idee?

das Problem hast du immer, wenn du rundest. Du sieht im Beispiel ja auch, dass die Abgänge unterschiedliche Kurse haben, obwohl es nur einen einzigen Zugang gibt.
Die Makrofunktion bezieht die berechneten Kurse selbt nicht ein. Das Problem ist, dass du einmal beispielsweise 10,006 Euro hast und die aufteilst. 10,006€ sind gerundet 10,01€, aber zweimal 5,003€ sind gerundet 5,00€. Dann verschwindet ein Cent. Das Problem lässt sich auch nicht durch Runden am Anfang beheben.
Ich habe keine gute Idee, wie man das beheben kann :/

VG

Mc Santa
21.07.2014, 07:52
Hallo Santa, da bist du ja schon wieder :D

Nein, ich hätte gerne für jeden Abgang eine Auflistung der für diesen Betrag verwendeten Eingänge. Also die Beträge die er aufsummiert (verbleibende Reste + die weitere Zugänge) um den Abgang zu "begleichen"... ungefähr so:
Abgang 1000 USD
1. Rest 100 USD_1,365_73,26 EURO
2. 600 USD_1,367_438,92 EURO
3. 300 USD_1,371_218,82 EURO

Als Abgang berechnet er dann 1000 USD_1,367989_731,00 EURO

Damit kann ich erkennen, welcher Eingang für welchen Abgang wie verwendet wurde.

Hallo,

wie soll das dargestellt werden? Ich weiß ja nicht, wie viele Zugänge für einen Abgang verbraucht werden.

Das ist ziemlich schwierig, das Makro zielt nur auf die Berechnung, zumal ich es ja nur funktionierend übernommen und dann angepasst habe.

VG

herbearm
21.07.2014, 07:57
Ja das dachte ich mir. Und mit den Kursen hast du ja schon etwas eingebaut zum überprüfen der Differenzen :D Mit der Kontrolle kann ich ja überprüfen ob der Kontostand stimmt oder Rundungsdifferenzen auftreten. Nun habe ich eine Msg Box eingebaut falls Kontrolle und Reste nicht übereinstimmen. Die Differenz muss man nun manuell auf den Abgang oder aber auf den Rest verteilen. Und das mit der Zuordnung habe ich mir schon gedacht. Das war auch mein Problem bzw. meine Überlegung, dass einfach die Zuordnung fehlt. Schade aber trotzdem vielen Dank für die Mühen!