Zinsberechnung unter VB !

Hallo Leute ,

ich versuche jetzt schon den ganzen Tag ein dummes Programm in Visual Basic zu schreiben. Das soll eine Übung sein und ich habe alles fertig ausser diese Formel. Ich bekomme einfach keine zusammen und es klappt nicht mit denen die ich schon probiert habe. Nun hoffe ich das mir hier jemand helfen kann !

Die folgenden Werte gebe ich in eine Eingabemaske ein :

Startkapital
monatl.Rate
Zinssatz
Laufzeit

Nun soll er mir ausrechnen was ich jedes Jahr an Kapital habe und auch ausrechnen wie hoch meine Zinsen jedes Jahr sind. Dieses werde ich dann in einer Tabelle ausgeben. Ich kann aber auch kein ungefähres Programm finden wie die Formel dafür lauten muss. Ich bekomme sie nicht hin … weiss jemand Rat , hat jemand eine Formel oder Code für mich oder wenigstens irgendwelche Tips ?

DANKE !!

Gruß vIsIOn

Also:

Der Ertrag berechnet sich wie folgt

Ertrag = (Einlage * Jahreszins * Laufzeit) / (100 * 360)

Bei einer Laufzeit von mehr als einem kalenderjahr möchtest du vielleicht, dass die Zinserträge als neue verzinsliche Einlagen gelten. bei Ablauf dieses Kalenderjahres muss der Ertrag der vorigen Zinsperiode der Einlage hinzugerechnet werden.

Ich hatte folgenden Beispiel versucht:
DAS BEISPIEL FUNKTIONIERT ABER NICHT.

Vielleicht kann mir ja jemand mal erklören wieso. Ich bekomme einen Überlauf.

Als Beispiel:

Private Sub Command1_Click()
Dim Lauf
Const Zinstage = 360
Dim einlage
Dim zinsen
Dim ertrag
Dim erg

Lauf = Laufzeit.Text
einlage = txtEinlage.Text
zinsen = Zinssatz.Text

While Lauf / Zinstage > 1
ertrag = (einlage * zinsen * Zinstage) / (100 * Zinstage)
Lauf = Lauf - Zinstage
einlage = einlage + ertrag
Wend

ertrag = (einlage * zinsen * Lauf) / (100 * Zinstage)

erg = einlage + ertrag

Ergebnis.Text = erg
End Sub

Ertrag = (Einlage * Jahreszins * Laufzeit) / (100 * 360)

Da fehlt mir aber der montl. Beitrag.

Angenommen ich habe 1000€ Startkapital , zahle noch 100€ jeden Monat ein. Dann habe ich einen jährlichen Zinsatz von 4% bei einer Laufzeit von 2 Jahren.

Dafür muss man doch eine Formel zusammenstellen können die mir 1. den Ertrag für jedes Jahr errechnet ( hier für 2 Jahre ) und den dazugehörigen Zins den ich für die jeweiligen Jahre erhalte.

Ich bin am verzweifeln …

Ertrag = (Einlage * Jahreszins * Laufzeit) / (100 * 360)

Als LAufzeit dann 28, 29, 30 oder 31 Tage und dann die Einlage um den Ertrag und die Einlagenerhöhung erhöhen. Oder jedes Jahr die Einlage erhöhen. Dabei dann aber immer die restlichen Zinstage im Auge behalten.

Du kannst in jeder Schleife fragen lassen, um weiviel die Einlage erhöht wird, oder du kannst vorher festlegen, indem du die Einlage einen festen Wert mit jeder Schleife erhöhst.

PS: Ich kenne mich mit dem Bankwesen nicht ganz so gut aus. Wenn da jetzt ein logischer Fehler drin ist, musst du mich aufklären.

Gruß

Alexander

Hi!

Ich hatte folgenden Beispiel versucht:
DAS BEISPIEL FUNKTIONIERT ABER NICHT.

Vielleicht kann mir ja jemand mal erklören wieso. Ich bekomme
einen Überlauf.

Schau dir mal diese zwei Zeilen Code an:

Const Zinstage = 360

ertrag = (einlage * zinsen * Zinstage) / (100 * Zinstage)

Eigentlich müsstest du es jetzt sehen… :wink:

Das Programm wird angewiesen, zwei Teilrechnungen durchzuführen:

(einlage * zinsen * Zinstage)
und
(100 * Zinstage)

Frage: wo soll das Programm das Ergebnis der zweiten Teilrechnung speichermäßig ablegen? Es ist nur eine Speicheradresse angegeben, nämlich „Zinstage“. Diese Speicheradresse ist aber als CONST deklariert, d.h. der Speicherinhalt darf nicht überschrieben werden. Also meldet das Programm einen Überlauf.

Das ist alles.

Ändere das Programm wie folgt ab:

Dim Zinstage
Zinstage = 360

und schon läuft es…

Besser wäre allerdings
Dim Zinstage as Long
(weil dann fällt die programminterne Konvertierung weg).

Grüße
Heinrich

Moin!

finanzmathematisch gesehen besteht dein Problem aus zwei Teilen:

  1. dein Startkapital
    dieses behandelst du nach der Kapitalwertmethode, wie in den Postings schon beschrieben:
    Kn = K0 * (1 + i)^n

  2. deine monatl. Rate
    Dies ist finanzmathematisch eine „Rente“ und es fehlt die Info, ob Sie vorschüssig (am 1. für den Monat) oder nachschüssig (am letzten Tag des Monats für den Monat) gezahlt werden soll. Des weiteren fehlt die Angabe, ob die Zahlungen sich auch unterjährig verzinsen…

Wie auch immer, schaue Dir bitte diese Formelsammlung an:
http://www.fh-duesseldorf.de/DOCS/FB/WIRT/peters_h/w…

Im Fall 2 auf Seite 4 siehst Du, wie Du den Rentenendwert Rn bei unterjähriger Zahlung (vor- oder nachschüssig) ABER jährlicher Verzinsung errechnest.

Sollte Dir die jährliche Verzinsung nicht reichen, wird’s lustig. Dann schaue Dir die Formeln auf Seite 5 (Fall 4a an).

Dein Gesamtkapital ist also immer Dein aufgezinstes Startkapital plus der Rentenendwert (so nennt man das).

Cheers!
Hawky

hm , ich versuche die Formel mal einzubauen und schaue mal ob er auf das Ergbenis kommt. Ist echt zum verzweifeln hier wenn man die Formel nicht mehr kennt …

Hi!

Ich bin am verzweifeln …

Probier das mal:

Dim Einlage As Long 'Startkapital
Dim Laufzeit As Long 'Laufzeit in Jahren
Dim Zinsen As Long 'Zinssatz als Prozentwert
Dim Rate As Long 'monatliche Einzahlung

Dim Monate As Long 'Anzahl Monate der Laufzeit
Dim Ertrag As Single 'Eingenommene Zinsen
Dim JahresErtrag As Single
Dim Kapital As Single 'kummuliertes Kapital
Dim ErgText As String 'Anzeigetext Ergebnis

Einlage = 1000
Laufzeit = 2
Zinsen = 4
Rate = 100

'Array für kummulierte Zinsen auf Jahresbasis
ReDim Jahreswert(1 To Laufzeit) As Single

Monate = Laufzeit * 12

Kapital = Einlage

For Berechnung = 1 To Monate
'Berechnung der Zinsen für einen Monat (nicht taggenau!)
Ertrag = (Kapital * Zinsen) / (100 * 12)
JahresErtrag = JahresErtrag + Ertrag
If Berechnung / 12 = Fix(Berechnung / 12) Then
Jahreswert(Berechnung / 12) = JahresErtrag
End If
Kapital = Kapital + Ertrag
If Berechnung Monate Then
'im letzten Monat keine Einzahlung mehr!
Kapital = Kapital + Rate
End If
Next Berechnung

ErgText = "Endkapital = " & Format$(Kapital, „###,##0.00“) & vbCrLf
For Berechnung = 1 To Laufzeit
ErgText = ErgText & "Zinsen nach Jahr " & Format$(Berechnung, „###0“) & ": " & Format$(Jahreswert(Berechnung), „###,##0.00“) & vbCrLf
Next Berechnung

MsgBox ErgText

Hinweis: Die Zinsen für die Jahren addieren sich auf und werden nicht für jedes Jahr neu berechnet. Wenn du das aber so haben möchtest, musst du im ersten IF in der FOR-Schleife den Wert „Jahresertrag“ auf 0 setzen.

Grüße
Heinrich

Äh, geht nicht…

Es sollen keine teilrechnungen sein, sonder er soll in einem Rutsch die Zinsformel ausrechnen. Das Ergebnis der Formel soll in den Ertrag fließen, da soll VB nichts zwischenspeichern, schon gar nícht in meine Konstante Zinstage!

Hi!

Okay, machen wir es mal ganz langsam :wink:

Eine Regel in der Mathematik besagt:
Punktrechnung geht vor Strichrechnung, und was in Klammern steht wird zuerst gerechnet.

Die Berechnungszeile in deinem Beispiel sah so aus (vereinfacht):

a = (b * c * d) / (100 * e)

Eine Variable ist im Grunde nichts anderes als der Name von Speicherplatz im Rechner. Und je nach Typ der Variable wird unterschiedlich viel Speicher reserviert und ggf. mit bestimmten Attributen versehen, z.B. Speicherinhalt darf geändert werden oder darf nicht geändert werden, etwa bei CONST-Deklarationen.

Strichrechnung kommt in unserer Formel nicht vor, also können wir die erstgenannte Regel außer acht lassen. Aber wir haben Klammern. Und was in Klammern steht, wird zuerst gerechnet.

Folglich muß der Computer zwei Zwischensummen bilden, nämlich die der ersten Klammerung und die der zweiten Klammerung. Er muss für das Ergebnis von (b * c * d) Speicherplatz zur Verfügung haben, ebenso für das Ergebnis von (100 * e). Erst jetzt, nach Berechnung dieser Zwischenergebnisse kann er das Gesamtergebnis ermitteln, also a.

Willst du das Ergebnis ausschließlich nach a bringen, also ohne Zwischenergebnis-Berechnung, dann mußt du deine Formel umbauen. Entweder löst du sie auf:

a = b * c * d
a = a / 100
a = a / e

oder du schreibst alles in eine Zeile, löst die Klammern auf und setzt entsprechend der Verarbeitungslogik die Operatoren:

a = b * c * d / 100 / e

Also nie vergessen: Klammern bedeuten Teilberechnungen, deren Zwischenergebnisse irgendwo abgelegt werden müssen.

Grüße
Heinrich

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

ich hatte den gleichen Fehler nochmal. Ich habe es nach deinen Erklärungen mit einem eigenen Beispiel versucht…

Bei der Berechnung der Variable ‚Unten‘ gibts wieder einen Überlauf.

Private Sub Command1_Click()
Dim Lauf As Long
Const Zinstage = 360
Dim einlage
Dim zinsen
Dim ertrag
Dim erg
Dim Oben
Dim Unten

Lauf = Laufzeit.Text
einlage = txtEinlage.Text
zinsen = Zinssatz.Text

While Lauf / Zinstage > 1
Oben = einlage * zinsen * Zinstage
Unten = 100 * Zinstage
ertrag = Oben / Unten

Lauf = Lauf - Zinstage
einlage = einlage + ertrag
Wend
Oben = einlage * zinsen * Lauf
Unten = 100 * Zinstage
ertrag = Oben / Unten

erg = einlage + ertrag

Ergebnis.Text = erg
End Sub

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]